diff -ur tar2rubyscript-none.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.1.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-none.tar.gz/tar2rubyscript/init.rb 2006-03-08 17:52:41.074696950 +0100 +++ tar2rubyscript-0.1.tar.gz/tar2rubyscript/init.rb 2003-08-18 18:59:33.000000000 +0200 @@ -0,0 +1,17 @@ +scriptfile = "tarrubyscript.rb" +tarfile = oldlocation(ARGV.shift) +outfile = oldlocation(ARGV.shift) +licensefile = oldlocation(ARGV.shift) + +script = File.new(scriptfile).read +archive = [File.new(tarfile, "rb").read].pack("m").split("\n").collect{|s| "# " + s}.join("\n") +license = File.new(licensefile).read if not licensefile.nil? + +script = "# License, not of this script, but of the application it contains:\n\n" +license + "\n" + script if not licensefile.nil? + +script.gsub!(/%LINES%/, (script.split("\n", -1).length-1).to_s) + +File.open(outfile, "wb") do |f| + f.write script + f.write archive +end diff -ur tar2rubyscript-none.tar.gz/tar2rubyscript/README tar2rubyscript-0.1.tar.gz/tar2rubyscript/README --- tar2rubyscript-none.tar.gz/tar2rubyscript/README 2006-03-08 17:52:41.075696939 +0100 +++ tar2rubyscript-0.1.tar.gz/tar2rubyscript/README 2003-08-18 18:54:13.000000000 +0200 @@ -0,0 +1,5 @@ +Usage: ruby tar2rubyscript.rb tarrubyscript.rb application.tar application.rb [licence.txt] + +Just ignore the existance of init.rb ... + +For more information, see http://www.erikveen.dds.nl/tar2rubyscript/ . diff -ur tar2rubyscript-none.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.1.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-none.tar.gz/tar2rubyscript/tar2rubyscript.rb 2006-03-08 17:52:41.072696973 +0100 +++ tar2rubyscript-0.1.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-08-18 18:59:33.000000000 +0200 @@ -0,0 +1,17 @@ +scriptfile = ARGV.shift +tarfile = ARGV.shift +outfile = ARGV.shift +licensefile = ARGV.shift + +script = File.new(scriptfile).read +archive = [File.new(tarfile, "rb").read].pack("m").split("\n").collect{|s| "# " + s}.join("\n") +license = File.new(licensefile).read if not licensefile.nil? + +script = "# License, not of this script, but of the application it contains:\n\n" +license + "\n" + script if not licensefile.nil? + +script.gsub!(/%LINES%/, (script.split("\n", -1).length-1).to_s) + +File.open(outfile, "wb") do |f| + f.write script + f.write archive +end diff -ur tar2rubyscript-none.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.1.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-none.tar.gz/tar2rubyscript/tarrubyscript.rb 2006-03-08 17:52:41.073696961 +0100 +++ tar2rubyscript-0.1.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-18 18:59:33.000000000 +0200 @@ -0,0 +1,253 @@ +# License of this script, not of the application it contains: + +# Copyright Erik Veenstra <tar2rubyscript@erikveen.dds.nl> + +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License, +# version 2, as published by the Free Software Foundation. + +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. + +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, +# Boston, MA 02111-1307 USA + +LINES = %LINES% + +BLOCKSIZE = 512 + +NAMELEN = 100 +MODELEN = 8 +UIDLEN = 8 +GIDLEN = 8 +CHKSUMLEN = 8 +SIZELEN = 12 +MAGICLEN = 8 +MODTIMELEN = 12 +UNAMELEN = 32 +GNAMELEN = 32 +DEVLEN = 8 +TMAGIC = 'ustar' +GNU_TMAGIC = 'ustar ' + +LF_OLDFILE = '\0' +LF_FILE = '0' +LF_LINK = '1' +LF_SYMLINK = '2' +LF_CHAR = '3' +LF_BLOCK = '4' +LF_DIR = '5' +LF_FIFO = '6' +LF_CONTIG = '7' + +class Reader + def initialize(filehandle) + @fp = filehandle + end + + def each + @fp.rewind + + while entry = next_entry + yield(entry) + end + end + + def next_entry + buf = @fp.read(BLOCKSIZE) + + if buf == "\000" * BLOCKSIZE + entry = nil + else + entry = Entry.new(buf, @fp) + end + + entry + end + + def extract + each do |entry| + entry.extract + end + end +end + +class Entry + attr_reader(:header, :data) + + def initialize(header, fp) + @header = Header.new(header) + + if @header.file? + #puts "File: #{@header.name}, #{@header.size} bytes" + + padding = (BLOCKSIZE - (@header.size % BLOCKSIZE)) % BLOCKSIZE + + @data = fp.read(@header.size) if @header.size > 0 + dummy = fp.read(padding) if padding > 0 + end + end + + def extract + if not @header.name.empty? + if @header.dir? + begin + Dir.mkdir(@header.name, @header.mode) + rescue SystemCallError => e + puts "Couldn't create dir: " + e.message + end + else + begin + File.open(@header.name, "wb") do |fp| + fp.write(@data) + fp.chmod(@header.mode) + end + rescue => e + puts "Couldn't create file: " + e.message + end + end + + #File.utime(@header.mtime, Time.new, @header.name) # ??? + end + end +end + +class Header + attr_reader(:name, :size, :mtime, :uname, :gname, :mode) + + def initialize(header) + types = ['str', 'oct', 'oct', 'oct', 'oct', 'time', 'oct', 'str', 'str', 'str', 'str', 'str', 'oct', 'oct'] + fields = header.unpack('A100 A8 A8 A8 A12 A12 A8 A1 A100 A8 A32 A32 A8 A8') + converted = [] + + begin + while field = fields.shift + type = types.shift + + case type + when 'str' then converted.push(field) + when 'oct' then converted.push(field.oct) + when 'time' then converted.push(Time::at(field.oct)) + end + end + + @name, @mode, @uid, @gid, @size, @mtime, @chksum, @linkflag, @linkname, @magic, @uname, @gname, @devmajor, @devminor = converted + + @name.gsub!(/\.\//, "") + + @raw = header + rescue ArgumentError => e + raise "Couldn't determine a real value for a field (#{field})" + end + + raise "Magic header value '#{@magic}' is invalid." if @magic != TMAGIC and @magic != GNU_TMAGIC + + @linkflag = LF_FILE if @linkflag == LF_OLDFILE or @linkflag == LF_CONTIG + @linkflag = LF_DIR if @name[-1] == '/' and @linkflag == LF_FILE + @linkname = @linkname[1,-1] if @linkname[0] == '/' + @size = 0 if @size < 0 + @name = @linkname + '/' + @name if @linkname.size > 0 + end + + def file? + @linkflag == LF_FILE + end + + def dir? + @linkflag == LF_DIR + end +end + +class Jail + def initialize(code, ldir) + @ldir = ldir + @code = code + end + + def eval + instance_eval(@code) + end + + def oldlocation(file) + if not file.nil? + res = @ldir + "/" + file + res = file if file =~ /^\// + res = file if file =~ /^.:/ + end + + res + end +end + +def rm(entry) + if FileTest.file?(entry) + File.delete(entry) + end + + if FileTest.directory?(entry) + ldir = Dir.pwd + + Dir.chdir(entry) + Dir.new(".").each do |e| + rm(e) if not [".", ".."].include?(e) + end + Dir.chdir(ldir) + + Dir.rmdir(entry) + end +end + +if FileTest.exists?("c:/") + WD = "c:/tmp" +else + WD = "/tmp" +end + +MF = "#{WD}/ear.f.#{Process.pid}" +MP = "#{WD}/ear.d.#{Process.pid}" + +Dir.mkdir(WD) if not FileTest.exists?(WD) +Dir.mkdir(MP) + +LDIR = Dir.pwd + +begin + + archive = File.new($0, "rb").read.split(/\n/, LINES+1)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + + File.open(MF, "wb"){|f| f.write archive} + + Dir.chdir(MP) + + File.open(MF, "rb") do |fp| + Reader.new(fp).extract + end + + entries = Dir.entries(".") + entries.delete(".") + entries.delete("..") + + if entries.length == 1 + entry = entries.shift + if FileTest.directory?(entry) + Dir.chdir(entry) + end + end + + File.open("init.rb") do |f| + Jail.new(f.read, LDIR).eval + end + +ensure + + Dir.chdir(LDIR) + + rm(MF) + rm(MP) + +end + diff -ur tar2rubyscript-0.1.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.1.1.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.1.tar.gz/tar2rubyscript/init.rb 2003-08-18 18:59:33.000000000 +0200 +++ tar2rubyscript-0.1.1.tar.gz/tar2rubyscript/init.rb 2003-08-19 21:03:03.000000000 +0200 @@ -3,11 +3,14 @@ outfile = oldlocation(ARGV.shift) licensefile = oldlocation(ARGV.shift) -script = File.new(scriptfile).read -archive = [File.new(tarfile, "rb").read].pack("m").split("\n").collect{|s| "# " + s}.join("\n") -license = File.new(licensefile).read if not licensefile.nil? +script = nil ; File.open(scriptfile) {|f| script = f.read} +archive = nil ; File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} -script = "# License, not of this script, but of the application it contains:\n\n" +license + "\n" + script if not licensefile.nil? +if not licensefile.nil? + lic = nil ; File.open(licensefile) {|f| lic = f.read} + + script = "# License, not of this script, but of the application it contains:\n\n" + lic + "\n" + script +end script.gsub!(/%LINES%/, (script.split("\n", -1).length-1).to_s) diff -ur tar2rubyscript-0.1.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.1.1.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-0.1.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-08-18 18:59:33.000000000 +0200 +++ tar2rubyscript-0.1.1.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-08-19 21:03:03.000000000 +0200 @@ -3,11 +3,14 @@ outfile = ARGV.shift licensefile = ARGV.shift -script = File.new(scriptfile).read -archive = [File.new(tarfile, "rb").read].pack("m").split("\n").collect{|s| "# " + s}.join("\n") -license = File.new(licensefile).read if not licensefile.nil? +script = nil ; File.open(scriptfile) {|f| script = f.read} +archive = nil ; File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} -script = "# License, not of this script, but of the application it contains:\n\n" +license + "\n" + script if not licensefile.nil? +if not licensefile.nil? + lic = nil ; File.open(licensefile) {|f| lic = f.read} + + script = "# License, not of this script, but of the application it contains:\n\n" + lic + "\n" + script +end script.gsub!(/%LINES%/, (script.split("\n", -1).length-1).to_s) diff -ur tar2rubyscript-0.1.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.1.1.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.1.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-18 18:59:33.000000000 +0200 +++ tar2rubyscript-0.1.1.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-19 21:03:03.000000000 +0200 @@ -217,7 +217,9 @@ begin - archive = File.new($0, "rb").read.split(/\n/, LINES+1)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + archive = nil + + File.open($0, "rb"){|f| archive = f.read.split(/\n/, LINES+1)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift} File.open(MF, "wb"){|f| f.write archive} diff -ur tar2rubyscript-0.1.1.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.1.2.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.1.1.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-19 21:03:03.000000000 +0200 +++ tar2rubyscript-0.1.2.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-27 23:12:20.000000000 +0200 @@ -163,13 +163,18 @@ end class Jail - def initialize(code, ldir) + def initialize(ldir) @ldir = ldir - @code = code end def eval - instance_eval(@code) + File.open("init.rb") do |f| + instance_eval(f.read) + end + + ObjectSpace::each_object(IO) do |obj| + obj.close rescue nil + end end def oldlocation(file) @@ -207,11 +212,11 @@ WD = "/tmp" end -MF = "#{WD}/ear.f.#{Process.pid}" -MP = "#{WD}/ear.d.#{Process.pid}" +MF = "#{WD}/tar2rubyscript.f.#{Process.pid}" +MP = "#{WD}/tar2rubyscript.d.#{Process.pid}" Dir.mkdir(WD) if not FileTest.exists?(WD) -Dir.mkdir(MP) +Dir.mkdir(MP) if not FileTest.exists?(MP) LDIR = Dir.pwd @@ -240,9 +245,7 @@ end end - File.open("init.rb") do |f| - Jail.new(f.read, LDIR).eval - end + Jail.new(LDIR).eval ensure diff -ur tar2rubyscript-0.1.2.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.1.3.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.1.2.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-27 23:12:20.000000000 +0200 +++ tar2rubyscript-0.1.3.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-29 00:57:09.000000000 +0200 @@ -162,97 +162,103 @@ end end -class Jail - def initialize(ldir) - @ldir = ldir +class TempSpace + def initialize + @archive = File.new($0, "rb").read.split(/\n/, LINES+1)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + @orgdir = Dir.pwd + @workdir = "/tmp" + @workdir = "c:/tmp" if FileTest.exists?("c:/") + @tempdir = "#{@workdir}/tar2rubyscript.d.#{Process.pid}" + @tempfile = "#{@workdir}/tar2rubyscript.f.#{Process.pid}" end def eval - File.open("init.rb") do |f| - instance_eval(f.read) - end + begin - ObjectSpace::each_object(IO) do |obj| - obj.close rescue nil - end - end + # Create the temp environment. - def oldlocation(file) - if not file.nil? - res = @ldir + "/" + file - res = file if file =~ /^\// - res = file if file =~ /^.:/ - end + Dir.mkdir(@workdir) if not FileTest.exists?(@workdir) + Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) - res - end -end + Dir.chdir(@tempdir) -def rm(entry) - if FileTest.file?(entry) - File.delete(entry) - end + File.open(@tempfile, "wb") {|f| f.write @archive} + File.open(@tempfile, "rb") {|f| Reader.new(f).extract} - if FileTest.directory?(entry) - ldir = Dir.pwd + # Eventually look for a subdirectory. - Dir.chdir(entry) - Dir.new(".").each do |e| - rm(e) if not [".", ".."].include?(e) + entries = Dir.entries(".") + entries.delete(".") + entries.delete("..") + + if entries.length == 1 + entry = entries.shift + if FileTest.directory?(entry) + Dir.chdir(entry) + end end - Dir.chdir(ldir) - Dir.rmdir(entry) - end -end + # Remember all IO objects. -if FileTest.exists?("c:/") - WD = "c:/tmp" -else - WD = "/tmp" -end + ioobjects = [] + ObjectSpace::each_object(IO) do |obj| + ioobjects << obj.id + end -MF = "#{WD}/tar2rubyscript.f.#{Process.pid}" -MP = "#{WD}/tar2rubyscript.d.#{Process.pid}" + # Execute init.rb . -Dir.mkdir(WD) if not FileTest.exists?(WD) -Dir.mkdir(MP) if not FileTest.exists?(MP) + File.open("init.rb") do |f| + instance_eval(f.read) + end -LDIR = Dir.pwd + ensure -begin + # Close all IO objects, opened in init.rb . - archive = nil + ObjectSpace::each_object(IO) do |obj| + obj.close rescue nil if not ioobjects.include?(obj.id) + end - File.open($0, "rb"){|f| archive = f.read.split(/\n/, LINES+1)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift} + # Remove the temp environment. - File.open(MF, "wb"){|f| f.write archive} + Dir.chdir(@orgdir) - Dir.chdir(MP) + recursivedelete(@tempfile) + recursivedelete(@tempdir) - File.open(MF, "rb") do |fp| - Reader.new(fp).extract end + end - entries = Dir.entries(".") - entries.delete(".") - entries.delete("..") - - if entries.length == 1 - entry = entries.shift - if FileTest.directory?(entry) - Dir.chdir(entry) - end + def recursivedelete(entry) + if FileTest.file?(entry) + File.delete(entry) end - Jail.new(LDIR).eval + if FileTest.directory?(entry) + pdir = Dir.pwd + + Dir.chdir(entry) + Dir.new(".").each do |e| + recursivedelete(e) if not [".", ".."].include?(e) + end + Dir.chdir(pdir) -ensure + Dir.rmdir(entry) + end + end - Dir.chdir(LDIR) + def oldlocation(file) + res = file - rm(MF) - rm(MP) + if not file.nil? + res = @orgdir + "/" + file + res = file if file =~ /^\// + res = file if file =~ /^.:/ + end + res + end end +TempSpace.new.eval + diff -ur tar2rubyscript-0.1.3.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.1.3.tar.gz/tar2rubyscript/init.rb 2003-08-29 00:57:09.000000000 +0200 +++ tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/init.rb 2003-08-31 23:04:22.000000000 +0200 @@ -12,9 +12,9 @@ script = "# License, not of this script, but of the application it contains:\n\n" + lic + "\n" + script end -script.gsub!(/%LINES%/, (script.split("\n", -1).length-1).to_s) - File.open(outfile, "wb") do |f| f.write script + f.write "\n" + f.write "\n" f.write archive end diff -ur tar2rubyscript-0.1.3.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-0.1.3.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-08-29 00:57:09.000000000 +0200 +++ tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-08-31 23:04:22.000000000 +0200 @@ -12,9 +12,9 @@ script = "# License, not of this script, but of the application it contains:\n\n" + lic + "\n" + script end -script.gsub!(/%LINES%/, (script.split("\n", -1).length-1).to_s) - File.open(outfile, "wb") do |f| f.write script + f.write "\n" + f.write "\n" f.write archive end diff -ur tar2rubyscript-0.1.3.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.1.3.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-29 00:57:09.000000000 +0200 +++ tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-31 23:04:22.000000000 +0200 @@ -16,8 +16,6 @@ # Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA -LINES = %LINES% - BLOCKSIZE = 512 NAMELEN = 100 @@ -164,7 +162,7 @@ class TempSpace def initialize - @archive = File.new($0, "rb").read.split(/\n/, LINES+1)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift @orgdir = Dir.pwd @workdir = "/tmp" @workdir = "c:/tmp" if FileTest.exists?("c:/") @@ -261,4 +259,3 @@ end TempSpace.new.eval - diff -ur tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-08-31 23:04:22.000000000 +0200 +++ tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-09-09 21:53:33.000000000 +0200 @@ -16,6 +16,13 @@ # Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA +# Tar2RubyScript constants + +JustExtract = false +ARGV.concat [] + +# Tar constants + BLOCKSIZE = 512 NAMELEN = 100 @@ -171,50 +178,43 @@ end def eval - begin # Create the temp environment. - Dir.mkdir(@workdir) if not FileTest.exists?(@workdir) - Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) + Dir.mkdir(@workdir) if not FileTest.exists?(@workdir) + Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) - Dir.chdir(@tempdir) + Dir.chdir(@tempdir) - File.open(@tempfile, "wb") {|f| f.write @archive} - File.open(@tempfile, "rb") {|f| Reader.new(f).extract} + File.open(@tempfile, "wb") {|f| f.write @archive} + File.open(@tempfile, "rb") {|f| Reader.new(f).extract} # Eventually look for a subdirectory. - entries = Dir.entries(".") - entries.delete(".") - entries.delete("..") - - if entries.length == 1 - entry = entries.shift - if FileTest.directory?(entry) - Dir.chdir(entry) - end - end - - # Remember all IO objects. - - ioobjects = [] - ObjectSpace::each_object(IO) do |obj| - ioobjects << obj.id + entries = Dir.entries(".") + entries.delete(".") + entries.delete("..") + + if entries.length == 1 + entry = entries.shift + if FileTest.directory?(entry) + Dir.chdir(entry) end + end - # Execute init.rb . + # Remember all File objects. - File.open("init.rb") do |f| - instance_eval(f.read) - end + @ioobjects = [] + ObjectSpace::each_object(File) do |obj| + @ioobjects << obj + end - ensure + at_exit do - # Close all IO objects, opened in init.rb . + # Close all File objects, opened in init.rb . - ObjectSpace::each_object(IO) do |obj| - obj.close rescue nil if not ioobjects.include?(obj.id) + ObjectSpace::each_object(File) do |obj| + obj.close if (not obj.closed? and not @ioobjects.include?(obj)) end # Remove the temp environment. @@ -225,6 +225,12 @@ recursivedelete(@tempdir) end + + # Execute init.rb . + + File.open("init.rb") do |f| + instance_eval(f.read) + end end def recursivedelete(entry) @@ -258,4 +264,43 @@ end end -TempSpace.new.eval +class Extract + def initialize + @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + @orgdir = Dir.pwd + @workdir = "/tmp" + @workdir = "c:/tmp" if FileTest.exists?("c:/") + @tempdir = @orgdir + @tempfile = "#{@workdir}/tar2rubyscript.f.#{Process.pid}" + end + + def extract + begin + + # Create the temp environment. + + Dir.mkdir(@workdir) if not FileTest.exists?(@workdir) + Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) + + Dir.chdir(@tempdir) + + File.open(@tempfile, "wb") {|f| f.write @archive} + File.open(@tempfile, "rb") {|f| Reader.new(f).extract} + + ensure + + # Remove the temp environment. + + Dir.chdir(@orgdir) + + File.delete(@tempfile) + + end + end +end + +if JustExtract + Extract.new.extract +else + TempSpace.new.eval +end diff -ur tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.2.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/init.rb 2003-09-09 21:53:33.000000000 +0200 +++ tar2rubyscript-0.2.tar.gz/tar2rubyscript/init.rb 2003-09-14 12:32:14.000000000 +0200 @@ -3,6 +3,15 @@ outfile = oldlocation(ARGV.shift) licensefile = oldlocation(ARGV.shift) +if outfile.nil? + puts "Usage: ruby tar2rubyscript.rb application.tar application.rb [license.txt]" + + exit 1 +end + +raise "#{tarfile} doesn't exist." if not FileTest.file?(tarfile) +raise "#{licensefile} doesn't exist." if (not licensefile.nil? and not FileTest.file?(licensefile)) + script = nil ; File.open(scriptfile) {|f| script = f.read} archive = nil ; File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} diff -ur tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.2.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-09-09 21:53:33.000000000 +0200 +++ tar2rubyscript-0.2.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-09-14 12:32:14.000000000 +0200 @@ -3,6 +3,15 @@ outfile = ARGV.shift licensefile = ARGV.shift +if outfile.nil? + puts "Usage: ruby tar2rubyscript.rb application.tar application.rb [license.txt]" + + exit 1 +end + +raise "#{tarfile} doesn't exist." if not FileTest.file?(tarfile) +raise "#{licensefile} doesn't exist." if (not licensefile.nil? and not FileTest.file?(licensefile)) + script = nil ; File.open(scriptfile) {|f| script = f.read} archive = nil ; File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} diff -ur tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.2.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-09-09 21:53:33.000000000 +0200 +++ tar2rubyscript-0.2.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-09-14 12:32:14.000000000 +0200 @@ -16,9 +16,11 @@ # Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA +# License of this script, not of the application it contains: + # Tar2RubyScript constants -JustExtract = false +JustExtract = ARGV.include?("--tar2rubyscript-justextract") ARGV.concat [] # Tar constants @@ -226,6 +228,10 @@ end + ARGV.delete_if do |arg| + arg =~ /^--tar2rubyscript-/ + end + # Execute init.rb . File.open("init.rb") do |f| diff -ur tar2rubyscript-0.2.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.3.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.2.tar.gz/tar2rubyscript/init.rb 2003-09-14 12:32:14.000000000 +0200 +++ tar2rubyscript-0.3.tar.gz/tar2rubyscript/init.rb 2006-03-08 17:52:49.786599041 +0100 @@ -1,29 +0,0 @@ -scriptfile = "tarrubyscript.rb" -tarfile = oldlocation(ARGV.shift) -outfile = oldlocation(ARGV.shift) -licensefile = oldlocation(ARGV.shift) - -if outfile.nil? - puts "Usage: ruby tar2rubyscript.rb application.tar application.rb [license.txt]" - - exit 1 -end - -raise "#{tarfile} doesn't exist." if not FileTest.file?(tarfile) -raise "#{licensefile} doesn't exist." if (not licensefile.nil? and not FileTest.file?(licensefile)) - -script = nil ; File.open(scriptfile) {|f| script = f.read} -archive = nil ; File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} - -if not licensefile.nil? - lic = nil ; File.open(licensefile) {|f| lic = f.read} - - script = "# License, not of this script, but of the application it contains:\n\n" + lic + "\n" + script -end - -File.open(outfile, "wb") do |f| - f.write script - f.write "\n" - f.write "\n" - f.write archive -end diff -ur tar2rubyscript-0.2.tar.gz/tar2rubyscript/README tar2rubyscript-0.3.tar.gz/tar2rubyscript/README --- tar2rubyscript-0.2.tar.gz/tar2rubyscript/README 2003-08-18 18:54:13.000000000 +0200 +++ tar2rubyscript-0.3.tar.gz/tar2rubyscript/README 2003-09-21 18:01:58.000000000 +0200 @@ -1,5 +1,3 @@ Usage: ruby tar2rubyscript.rb tarrubyscript.rb application.tar application.rb [licence.txt] -Just ignore the existance of init.rb ... - For more information, see http://www.erikveen.dds.nl/tar2rubyscript/ . diff -ur tar2rubyscript-0.2.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.3.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-0.2.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-09-14 12:32:14.000000000 +0200 +++ tar2rubyscript-0.3.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-09-21 19:15:48.000000000 +0200 @@ -1,19 +1,49 @@ -scriptfile = ARGV.shift +scriptfile = "tarrubyscript.rb" tarfile = ARGV.shift outfile = ARGV.shift licensefile = ARGV.shift if outfile.nil? puts "Usage: ruby tar2rubyscript.rb application.tar application.rb [license.txt]" + puts " or" + puts " ruby tar2rubyscript.rb application/ application.rb [license.txt]" + puts "" + puts "The second option needs the external program 'tar' for creating" + puts "the archive internally." exit 1 end -raise "#{tarfile} doesn't exist." if not FileTest.file?(tarfile) +raise "#{tarfile} doesn't exist." if not FileTest.exist?(tarfile) raise "#{licensefile} doesn't exist." if (not licensefile.nil? and not FileTest.file?(licensefile)) -script = nil ; File.open(scriptfile) {|f| script = f.read} -archive = nil ; File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} +script = nil +archive = nil + +File.open(scriptfile) {|f| script = f.read} + +if FileTest.file?(tarfile) + File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} +end + +tardir = tarfile.gsub(/[\/\\]$/, "") + +if FileTest.directory?(tardir) + orgdir = Dir.pwd + + Dir.chdir(tardir) + + if FileTest.file?("tar2rubyscript.sh") + puts "\". ./tar2rubyscript.sh\"" + system(". ./tar2rubyscript.sh") + end + + Dir.chdir("..") + + IO.popen("tar ch #{tardir.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + + Dir.chdir(orgdir) +end if not licensefile.nil? lic = nil ; File.open(licensefile) {|f| lic = f.read} diff -ur tar2rubyscript-0.2.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.2.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-09-14 12:32:14.000000000 +0200 +++ tar2rubyscript-0.3.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-09-21 19:15:48.000000000 +0200 @@ -257,7 +257,7 @@ end end - def oldlocation(file) + def oldlocation(file="") res = file if not file.nil? diff -ur tar2rubyscript-0.3.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-0.3.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-09-21 19:15:48.000000000 +0200 +++ tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-10-04 20:16:33.000000000 +0200 @@ -33,9 +33,14 @@ Dir.chdir(tardir) + if FileTest.file?("tar2rubyscript.bat") + puts "\".\\tar2rubyscript.bat\"" + system(".\\tar2rubyscript.bat") + end + if FileTest.file?("tar2rubyscript.sh") puts "\". ./tar2rubyscript.sh\"" - system(". ./tar2rubyscript.sh") + system("sh -c \". ./tar2rubyscript.sh\"") end Dir.chdir("..") diff -ur tar2rubyscript-0.3.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-09-21 19:15:48.000000000 +0200 +++ tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-04 20:16:33.000000000 +0200 @@ -21,8 +21,13 @@ # Tar2RubyScript constants JustExtract = ARGV.include?("--tar2rubyscript-justextract") + ARGV.concat [] +ARGV.delete_if do |arg| + arg =~ /^--tar2rubyscript-/ +end + # Tar constants BLOCKSIZE = 512 @@ -56,6 +61,12 @@ @fp = filehandle end + def extract + each do |entry| + entry.extract + end + end + def each @fp.rewind @@ -67,7 +78,7 @@ def next_entry buf = @fp.read(BLOCKSIZE) - if buf == "\000" * BLOCKSIZE + if buf.length < BLOCKSIZE or buf == "\000" * BLOCKSIZE entry = nil else entry = Entry.new(buf, @fp) @@ -75,12 +86,6 @@ entry end - - def extract - each do |entry| - entry.extract - end - end end class Entry @@ -90,8 +95,6 @@ @header = Header.new(header) if @header.file? - #puts "File: #{@header.name}, #{@header.size} bytes" - padding = (BLOCKSIZE - (@header.size % BLOCKSIZE)) % BLOCKSIZE @data = fp.read(@header.size) if @header.size > 0 @@ -105,30 +108,35 @@ begin Dir.mkdir(@header.name, @header.mode) rescue SystemCallError => e - puts "Couldn't create dir: " + e.message + puts "Couldn't create dir #{@header.name}: " + e.message end else - begin - File.open(@header.name, "wb") do |fp| - fp.write(@data) - fp.chmod(@header.mode) + if @header.file? + begin + File.open(@header.name, "wb") do |fp| + fp.write(@data) + fp.chmod(@header.mode) + end + rescue => e + puts "Couldn't create file #{@header.name}: " + e.message end - rescue => e - puts "Couldn't create file: " + e.message + else + puts "Couldn't handle entry #{@header.name}" end end - #File.utime(@header.mtime, Time.new, @header.name) # ??? + #File.chown(@header.uid, @header.gid, @header.name) + #File.utime(Time.now, @header.mtime, @header.name) end end end class Header - attr_reader(:name, :size, :mtime, :uname, :gname, :mode) + attr_reader(:name, :uid, :gid, :size, :mtime, :uname, :gname, :mode) def initialize(header) - types = ['str', 'oct', 'oct', 'oct', 'oct', 'time', 'oct', 'str', 'str', 'str', 'str', 'str', 'oct', 'oct'] fields = header.unpack('A100 A8 A8 A8 A12 A12 A8 A1 A100 A8 A32 A32 A8 A8') + types = ['str', 'oct', 'oct', 'oct', 'oct', 'time', 'oct', 'str', 'str', 'str', 'str', 'str', 'oct', 'oct'] converted = [] begin @@ -144,7 +152,7 @@ @name, @mode, @uid, @gid, @size, @mtime, @chksum, @linkflag, @linkname, @magic, @uname, @gname, @devmajor, @devminor = converted - @name.gsub!(/\.\//, "") + @name.gsub!(/^\.\//, "") @raw = header rescue ArgumentError => e @@ -172,35 +180,37 @@ class TempSpace def initialize @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift - @orgdir = Dir.pwd - @workdir = "/tmp" - @workdir = "c:/tmp" if FileTest.exists?("c:/") - @tempdir = "#{@workdir}/tar2rubyscript.d.#{Process.pid}" - @tempfile = "#{@workdir}/tar2rubyscript.f.#{Process.pid}" + @olddir = Dir.pwd + @tmpdir = "/tmp" + @tmpdir = "c:/tmp" if FileTest.exists?("c:/") + @tempdir = "#{@tmpdir}/tar2rubyscript.d.#{Process.pid}" + @tempfile = "#{@tmpdir}/tar2rubyscript.f.#{Process.pid}" + + @newdir=@tempdir end def eval - - # Create the temp environment. - - Dir.mkdir(@workdir) if not FileTest.exists?(@workdir) + Dir.mkdir(@tmpdir) if not FileTest.exists?(@tmpdir) Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) - Dir.chdir(@tempdir) + newlocation do + + # Create the temp environment. - File.open(@tempfile, "wb") {|f| f.write @archive} - File.open(@tempfile, "rb") {|f| Reader.new(f).extract} + File.open(@tempfile, "wb") {|f| f.write @archive} + File.open(@tempfile, "rb") {|f| Reader.new(f).extract} # Eventually look for a subdirectory. - entries = Dir.entries(".") - entries.delete(".") - entries.delete("..") - - if entries.length == 1 - entry = entries.shift - if FileTest.directory?(entry) - Dir.chdir(entry) + entries = Dir.entries(@tempdir) + entries.delete(".") + entries.delete("..") + + if entries.length == 1 + entry = @tempdir + "/" + entries.shift + if FileTest.directory?(entry) + @newdir = entry + end end end @@ -221,21 +231,18 @@ # Remove the temp environment. - Dir.chdir(@orgdir) + Dir.chdir(@olddir) recursivedelete(@tempfile) recursivedelete(@tempdir) - - end - - ARGV.delete_if do |arg| - arg =~ /^--tar2rubyscript-/ end # Execute init.rb . - File.open("init.rb") do |f| - instance_eval(f.read) + newlocation do + File.open("init.rb") do |f| + instance_eval(f.read) + end end end @@ -258,12 +265,28 @@ end def oldlocation(file="") - res = file + if block_given? + pdir = Dir.pwd + + Dir.chdir(@olddir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, @olddir) if not file.nil? + end + + res + end - if not file.nil? - res = @orgdir + "/" + file - res = file if file =~ /^\// - res = file if file =~ /^.:/ + def newlocation(file="") + if block_given? + pdir = Dir.pwd + + Dir.chdir(@newdir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, @newdir) if not file.nil? end res @@ -273,11 +296,9 @@ class Extract def initialize @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift - @orgdir = Dir.pwd - @workdir = "/tmp" - @workdir = "c:/tmp" if FileTest.exists?("c:/") - @tempdir = @orgdir - @tempfile = "#{@workdir}/tar2rubyscript.f.#{Process.pid}" + @tmpdir = "/tmp" + @tmpdir = "c:/tmp" if FileTest.exists?("c:/") + @tempfile = "#{@tmpdir}/tar2rubyscript.f.#{Process.pid}" end def extract @@ -285,10 +306,7 @@ # Create the temp environment. - Dir.mkdir(@workdir) if not FileTest.exists?(@workdir) - Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) - - Dir.chdir(@tempdir) + Dir.mkdir(@tmpdir) if not FileTest.exists?(@tmpdir) File.open(@tempfile, "wb") {|f| f.write @archive} File.open(@tempfile, "rb") {|f| Reader.new(f).extract} @@ -297,8 +315,6 @@ # Remove the temp environment. - Dir.chdir(@orgdir) - File.delete(@tempfile) end diff -ur tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/LICENSE tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/LICENSE --- tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/LICENSE 2006-03-08 17:52:52.322570911 +0100 +++ tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/LICENSE 2003-10-10 14:06:46.000000000 +0200 @@ -0,0 +1,15 @@ +# Copyright Erik Veenstra <tar2rubyscript@erikveen.dds.nl> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, +# Boston, MA 02111-1307 USA. diff -ur tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/README tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/README --- tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/README 2003-09-21 18:01:58.000000000 +0200 +++ tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/README 2003-10-10 18:09:04.000000000 +0200 @@ -1,3 +1,11 @@ -Usage: ruby tar2rubyscript.rb tarrubyscript.rb application.tar application.rb [licence.txt] +Usage: ruby tar2rubyscript.rb application.tar [application.rb [licence.txt]] + or + ruby tar2rubyscript.rb application/ [application.rb [licence.txt]] + +The second variant needs the external program 'tar' for creating the +archive internally. The first one doesn't. + +If "application.rb" is not provided, it will be determined from +"application.tar" or "application/". For more information, see http://www.erikveen.dds.nl/tar2rubyscript/ . diff -ur tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-10-04 20:16:33.000000000 +0200 +++ tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-10-10 19:40:46.000000000 +0200 @@ -1,12 +1,14 @@ scriptfile = "tarrubyscript.rb" tarfile = ARGV.shift -outfile = ARGV.shift +rbfile = ARGV.shift licensefile = ARGV.shift -if outfile.nil? - puts "Usage: ruby tar2rubyscript.rb application.tar application.rb [license.txt]" +tarfile.gsub!(/[\/\\]$/, "") + +if tarfile.nil? + puts "Usage: ruby tar2rubyscript.rb application.tar [application.rb [license.txt]]" puts " or" - puts " ruby tar2rubyscript.rb application/ application.rb [license.txt]" + puts " ruby tar2rubyscript.rb application/ [application.rb [license.txt]]" puts "" puts "The second option needs the external program 'tar' for creating" puts "the archive internally." @@ -14,8 +16,16 @@ exit 1 end -raise "#{tarfile} doesn't exist." if not FileTest.exist?(tarfile) -raise "#{licensefile} doesn't exist." if (not licensefile.nil? and not FileTest.file?(licensefile)) +if not FileTest.exist?(tarfile) + puts "#{tarfile} doesn't exist." + exit +end + +if not licensefile.nil? and not FileTest.file?(licensefile) + puts "#{licensefile} doesn't exist." + exit +end + script = nil archive = nil @@ -26,12 +36,10 @@ File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} end -tardir = tarfile.gsub(/[\/\\]$/, "") - -if FileTest.directory?(tardir) +if FileTest.directory?(tarfile) orgdir = Dir.pwd - Dir.chdir(tardir) + Dir.chdir(tarfile) if FileTest.file?("tar2rubyscript.bat") puts "\".\\tar2rubyscript.bat\"" @@ -45,7 +53,7 @@ Dir.chdir("..") - IO.popen("tar ch #{tardir.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + IO.popen("tar ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} Dir.chdir(orgdir) end @@ -56,7 +64,9 @@ script = "# License, not of this script, but of the application it contains:\n\n" + lic + "\n" + script end -File.open(outfile, "wb") do |f| +rbfile = tarfile.gsub(/\.tar$/, "") + ".rb" if (rbfile.nil? or File.basename(rbfile) == "-") + +File.open(rbfile, "wb") do |f| f.write script f.write "\n" f.write "\n" diff -ur tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-04 20:16:33.000000000 +0200 +++ tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-10 19:40:46.000000000 +0200 @@ -1,20 +1,20 @@ # License of this script, not of the application it contains: # Copyright Erik Veenstra <tar2rubyscript@erikveen.dds.nl> - +# # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License, # version 2, as published by the Free Software Foundation. - +# # This program is distributed in the hope that it will be # useful, but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. - +# # You should have received a copy of the GNU General Public # License along with this program; if not, write to the Free # Software Foundation, Inc., 59 Temple Place, Suite 330, -# Boston, MA 02111-1307 USA +# Boston, MA 02111-1307 USA. # License of this script, not of the application it contains: diff -ur tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/README tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/README --- tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/README 2003-10-10 18:09:04.000000000 +0200 +++ tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/README 2003-10-17 22:48:37.000000000 +0200 @@ -1,11 +1,12 @@ Usage: ruby tar2rubyscript.rb application.tar [application.rb [licence.txt]] or - ruby tar2rubyscript.rb application/ [application.rb [licence.txt]] + ruby tar2rubyscript.rb application[/] [application.rb [licence.txt]] -The second variant needs the external program 'tar' for creating the -archive internally. The first one doesn't. +If "application.rb" is not provided or equals to "-", it will +be derived from "application.tar" or "application/". -If "application.rb" is not provided, it will be determined from -"application.tar" or "application/". +If a license is provided, it will be put at the beginning of +The Application. -For more information, see http://www.erikveen.dds.nl/tar2rubyscript/ . +For more information, see +http://www.erikveen.dds.nl/tar2rubyscript/ . diff -ur tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-10-10 19:40:46.000000000 +0200 +++ tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-10-17 22:52:06.000000000 +0200 @@ -3,7 +3,7 @@ rbfile = ARGV.shift licensefile = ARGV.shift -tarfile.gsub!(/[\/\\]$/, "") +tarfile.dup.gsub!(/[\/\\]$/, "") if tarfile.nil? puts "Usage: ruby tar2rubyscript.rb application.tar [application.rb [license.txt]]" @@ -26,7 +26,6 @@ exit end - script = nil archive = nil @@ -53,15 +52,27 @@ Dir.chdir("..") - IO.popen("tar ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + begin + tar = "tar" + IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + rescue + tar = newlocation("tar.exe") + IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + end Dir.chdir(orgdir) end if not licensefile.nil? - lic = nil ; File.open(licensefile) {|f| lic = f.read} + lic = nil ; File.open(licensefile) {|f| lic = f.readlines} - script = "# License, not of this script, but of the application it contains:\n\n" + lic + "\n" + script + lic.collect! do |line| + line.gsub!(/[\r\n]/, "") + line = "# #{line}" unless line =~ /^[ \t]*#/ + line + end + + script = "# License, not of this script, but of the application it contains:\n#\n" + lic.join("\n") + "\n\n" + script end rbfile = tarfile.gsub(/\.tar$/, "") + ".rb" if (rbfile.nil? or File.basename(rbfile) == "-") @@ -71,4 +82,5 @@ f.write "\n" f.write "\n" f.write archive + f.write "\n" end diff -ur tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-10 19:40:46.000000000 +0200 +++ tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-17 22:52:06.000000000 +0200 @@ -1,5 +1,5 @@ # License of this script, not of the application it contains: - +# # Copyright Erik Veenstra <tar2rubyscript@erikveen.dds.nl> # # This program is free software; you can redistribute it and/or @@ -16,8 +16,6 @@ # Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA. -# License of this script, not of the application it contains: - # Tar2RubyScript constants JustExtract = ARGV.include?("--tar2rubyscript-justextract") @@ -137,9 +135,9 @@ def initialize(header) fields = header.unpack('A100 A8 A8 A8 A12 A12 A8 A1 A100 A8 A32 A32 A8 A8') types = ['str', 'oct', 'oct', 'oct', 'oct', 'time', 'oct', 'str', 'str', 'str', 'str', 'str', 'oct', 'oct'] - converted = [] begin + converted = [] while field = fields.shift type = types.shift @@ -181,16 +179,15 @@ def initialize @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift @olddir = Dir.pwd - @tmpdir = "/tmp" - @tmpdir = "c:/tmp" if FileTest.exists?("c:/") - @tempdir = "#{@tmpdir}/tar2rubyscript.d.#{Process.pid}" - @tempfile = "#{@tmpdir}/tar2rubyscript.f.#{Process.pid}" + temp = ENV["TEMP"] + temp = "/tmp" if temp.nil? + @tempdir = "#{temp}/tar2rubyscript.d.#{Process.pid}" + @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}" @newdir=@tempdir end def eval - Dir.mkdir(@tmpdir) if not FileTest.exists?(@tmpdir) Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) newlocation do @@ -202,14 +199,14 @@ # Eventually look for a subdirectory. - entries = Dir.entries(@tempdir) + entries = Dir.entries(".") entries.delete(".") entries.delete("..") if entries.length == 1 - entry = @tempdir + "/" + entries.shift + entry = entries.shift.dup if FileTest.directory?(entry) - @newdir = entry + @newdir = "#{@tempdir}/#{entry}" end end end @@ -296,9 +293,9 @@ class Extract def initialize @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift - @tmpdir = "/tmp" - @tmpdir = "c:/tmp" if FileTest.exists?("c:/") - @tempfile = "#{@tmpdir}/tar2rubyscript.f.#{Process.pid}" + temp = ENV["TEMP"] + temp = "/tmp" if temp.nil? + @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}" end def extract @@ -306,8 +303,6 @@ # Create the temp environment. - Dir.mkdir(@tmpdir) if not FileTest.exists?(@tmpdir) - File.open(@tempfile, "wb") {|f| f.write @archive} File.open(@tempfile, "rb") {|f| Reader.new(f).extract} Binary files tar2rubyscript-0.3.2.tar.gz/tar2rubyscript/tar.exe and tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tar.exe differ diff -ur tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb --- tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2006-03-08 17:52:54.865542869 +0100 +++ tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2003-10-23 23:15:17.000000000 +0200 @@ -0,0 +1,39 @@ +def oldlocation(file="") + if ENV.include?("OLDDIR") + dir = ENV["OLDDIR"] + else + dir = "." + end + + if block_given? + pdir = Dir.pwd + + Dir.chdir(dir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, dir) if not file.nil? + end + + res +end + +def newlocation(file="") + if ENV.include?("NEWDIR") + dir = ENV["NEWDIR"] + else + dir = "." + end + + if block_given? + pdir = Dir.pwd + + Dir.chdir(dir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, dir) if not file.nil? + end + + res +end diff -ur tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/init.rb 2006-03-08 17:52:54.861542913 +0100 +++ tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/init.rb 2003-10-19 19:16:01.000000000 +0200 @@ -0,0 +1,81 @@ +require "ev/oldandnewlocation" + +scriptfile = "tarrubyscript.rb" +tarfile = oldlocation(ARGV.shift) +rbfile = oldlocation(ARGV.shift) +licensefile = oldlocation(ARGV.shift) + +if tarfile.nil? + exit 1 +end + +tarfile.dup.gsub!(/[\/\\]$/, "") + +if not FileTest.exist?(tarfile) + puts "#{tarfile} doesn't exist." + exit +end + +if not licensefile.nil? and not FileTest.file?(licensefile) + puts "#{licensefile} doesn't exist." + exit +end + +script = nil +archive = nil + +File.open(scriptfile) {|f| script = f.read} + +if FileTest.file?(tarfile) + File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} +end + +if FileTest.directory?(tarfile) + orgdir = Dir.pwd + + Dir.chdir(tarfile) + + if FileTest.file?("tar2rubyscript.bat") + puts "\".\\tar2rubyscript.bat\"" + system(".\\tar2rubyscript.bat") + end + + if FileTest.file?("tar2rubyscript.sh") + puts "\". ./tar2rubyscript.sh\"" + system("sh -c \". ./tar2rubyscript.sh\"") + end + + Dir.chdir("..") + + begin + tar = "tar" + IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + rescue + tar = newlocation("tar.exe") + IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + end + + Dir.chdir(orgdir) +end + +if not licensefile.nil? + lic = nil ; File.open(licensefile) {|f| lic = f.readlines} + + lic.collect! do |line| + line.gsub!(/[\r\n]/, "") + line = "# #{line}" unless line =~ /^[ \t]*#/ + line + end + + script = "# License, not of this script, but of the application it contains:\n#\n" + lic.join("\n") + "\n\n" + script +end + +rbfile = tarfile.gsub(/\.tar$/, "") + ".rb" if (rbfile.nil? or File.basename(rbfile) == "-") + +File.open(rbfile, "wb") do |f| + f.write script + f.write "\n" + f.write "\n" + f.write archive + f.write "\n" +end diff -ur tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/README tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/README --- tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/README 2003-10-17 22:48:37.000000000 +0200 +++ tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/README 2003-10-19 19:17:19.000000000 +0200 @@ -1,6 +1,6 @@ -Usage: ruby tar2rubyscript.rb application.tar [application.rb [licence.txt]] +Usage: ruby init.rb application.tar [application.rb [licence.txt]] or - ruby tar2rubyscript.rb application[/] [application.rb [licence.txt]] + ruby init.rb application[/] [application.rb [licence.txt]] If "application.rb" is not provided or equals to "-", it will be derived from "application.tar" or "application/". diff -ur tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/tar2rubyscript.rb --- tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tar2rubyscript.rb 2003-10-17 22:52:06.000000000 +0200 +++ tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/tar2rubyscript.rb 2006-03-08 17:52:54.853543001 +0100 @@ -1,86 +0,0 @@ -scriptfile = "tarrubyscript.rb" -tarfile = ARGV.shift -rbfile = ARGV.shift -licensefile = ARGV.shift - -tarfile.dup.gsub!(/[\/\\]$/, "") - -if tarfile.nil? - puts "Usage: ruby tar2rubyscript.rb application.tar [application.rb [license.txt]]" - puts " or" - puts " ruby tar2rubyscript.rb application/ [application.rb [license.txt]]" - puts "" - puts "The second option needs the external program 'tar' for creating" - puts "the archive internally." - - exit 1 -end - -if not FileTest.exist?(tarfile) - puts "#{tarfile} doesn't exist." - exit -end - -if not licensefile.nil? and not FileTest.file?(licensefile) - puts "#{licensefile} doesn't exist." - exit -end - -script = nil -archive = nil - -File.open(scriptfile) {|f| script = f.read} - -if FileTest.file?(tarfile) - File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} -end - -if FileTest.directory?(tarfile) - orgdir = Dir.pwd - - Dir.chdir(tarfile) - - if FileTest.file?("tar2rubyscript.bat") - puts "\".\\tar2rubyscript.bat\"" - system(".\\tar2rubyscript.bat") - end - - if FileTest.file?("tar2rubyscript.sh") - puts "\". ./tar2rubyscript.sh\"" - system("sh -c \". ./tar2rubyscript.sh\"") - end - - Dir.chdir("..") - - begin - tar = "tar" - IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} - rescue - tar = newlocation("tar.exe") - IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} - end - - Dir.chdir(orgdir) -end - -if not licensefile.nil? - lic = nil ; File.open(licensefile) {|f| lic = f.readlines} - - lic.collect! do |line| - line.gsub!(/[\r\n]/, "") - line = "# #{line}" unless line =~ /^[ \t]*#/ - line - end - - script = "# License, not of this script, but of the application it contains:\n#\n" + lic.join("\n") + "\n\n" + script -end - -rbfile = tarfile.gsub(/\.tar$/, "") + ".rb" if (rbfile.nil? or File.basename(rbfile) == "-") - -File.open(rbfile, "wb") do |f| - f.write script - f.write "\n" - f.write "\n" - f.write archive - f.write "\n" -end diff -ur tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.3.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-17 22:52:06.000000000 +0200 +++ tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-22 18:52:06.000000000 +0200 @@ -187,7 +187,7 @@ @newdir=@tempdir end - def eval + def run Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) newlocation do @@ -319,5 +319,5 @@ if JustExtract Extract.new.extract else - TempSpace.new.eval + TempSpace.new.run end diff -ur tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb tar2rubyscript-0.3.5.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb --- tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2003-10-23 23:15:17.000000000 +0200 +++ tar2rubyscript-0.3.5.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2003-10-29 16:44:50.000000000 +0100 @@ -1,39 +1,42 @@ -def oldlocation(file="") - if ENV.include?("OLDDIR") +ENV["OLDDIR"] = Dir.pwd if not ENV.include?("OLDDIR") +ENV["NEWDIR"] = Dir.pwd if not ENV.include?("NEWDIR") + +begin + oldlocation +rescue NameError + def oldlocation(file="") dir = ENV["OLDDIR"] - else - dir = "." - end - if block_given? - pdir = Dir.pwd + if block_given? + pdir = Dir.pwd - Dir.chdir(dir) - res = yield - Dir.chdir(pdir) - else - res = File.expand_path(file, dir) if not file.nil? - end + Dir.chdir(dir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, dir) if not file.nil? + end - res + res + end end -def newlocation(file="") - if ENV.include?("NEWDIR") +begin + newlocation +rescue NameError + def newlocation(file="") dir = ENV["NEWDIR"] - else - dir = "." - end - if block_given? - pdir = Dir.pwd + if block_given? + pdir = Dir.pwd - Dir.chdir(dir) - res = yield - Dir.chdir(pdir) - else - res = File.expand_path(file, dir) if not file.nil? - end + Dir.chdir(dir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, dir) if not file.nil? + end - res + res + end end diff -ur tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.3.5.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/init.rb 2003-10-19 19:16:01.000000000 +0200 +++ tar2rubyscript-0.3.5.tar.gz/tar2rubyscript/init.rb 2003-10-29 15:06:30.000000000 +0100 @@ -12,12 +12,12 @@ tarfile.dup.gsub!(/[\/\\]$/, "") if not FileTest.exist?(tarfile) - puts "#{tarfile} doesn't exist." + $stderr.puts "#{tarfile} doesn't exist." exit end if not licensefile.nil? and not FileTest.file?(licensefile) - puts "#{licensefile} doesn't exist." + $stderr.puts "#{licensefile} doesn't exist." exit end @@ -36,12 +36,12 @@ Dir.chdir(tarfile) if FileTest.file?("tar2rubyscript.bat") - puts "\".\\tar2rubyscript.bat\"" + $stderr.puts "\".\\tar2rubyscript.bat\"" system(".\\tar2rubyscript.bat") end if FileTest.file?("tar2rubyscript.sh") - puts "\". ./tar2rubyscript.sh\"" + $stderr.puts "\". ./tar2rubyscript.sh\"" system("sh -c \". ./tar2rubyscript.sh\"") end diff -ur tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.5.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.4.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-22 18:52:06.000000000 +0200 +++ tar2rubyscript-0.3.5.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-28 22:47:30.000000000 +0100 @@ -19,6 +19,7 @@ # Tar2RubyScript constants JustExtract = ARGV.include?("--tar2rubyscript-justextract") +ToTar = ARGV.include?("--tar2rubyscript-totar") ARGV.concat [] @@ -41,8 +42,12 @@ UNAMELEN = 32 GNAMELEN = 32 DEVLEN = 8 + TMAGIC = 'ustar' GNU_TMAGIC = 'ustar ' +SOLARIS_TMAGIC = 'ustar00' + +MAGICS = [TMAGIC, GNU_TMAGIC, SOLARIS_TMAGIC] LF_OLDFILE = '\0' LF_FILE = '0' @@ -157,7 +162,7 @@ raise "Couldn't determine a real value for a field (#{field})" end - raise "Magic header value '#{@magic}' is invalid." if @magic != TMAGIC and @magic != GNU_TMAGIC + raise "Magic header value '#{@magic}' is invalid." if not MAGICS.include?(@magic) @linkflag = LF_FILE if @linkflag == LF_OLDFILE or @linkflag == LF_CONTIG @linkflag = LF_DIR if @name[-1] == '/' and @linkflag == LF_FILE @@ -184,10 +189,12 @@ @tempdir = "#{temp}/tar2rubyscript.d.#{Process.pid}" @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}" + @@tempspace = self + @newdir=@tempdir end - def run + def extract Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) newlocation do @@ -233,14 +240,6 @@ recursivedelete(@tempfile) recursivedelete(@tempdir) end - - # Execute init.rb . - - newlocation do - File.open("init.rb") do |f| - instance_eval(f.read) - end - end end def recursivedelete(entry) @@ -288,6 +287,22 @@ res end + + def self.oldlocation(file="") + if block_given? + @@tempspace.oldlocation { yield } + else + @@tempspace.oldlocation(file) + end + end + + def self.newlocation(file="") + if block_given? + @@tempspace.newlocation { yield } + else + @@tempspace.newlocation(file) + end + end end class Extract @@ -300,24 +315,51 @@ def extract begin - - # Create the temp environment. - File.open(@tempfile, "wb") {|f| f.write @archive} File.open(@tempfile, "rb") {|f| Reader.new(f).extract} - ensure + File.delete(@tempfile) + end + end +end - # Remove the temp environment. +class MakeTar + def initialize + @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + @tarfile = $0.gsub(/\.rb$/, ".tar") + end - File.delete(@tempfile) + def extract + File.open(@tarfile, "wb") {|f| f.write @archive} + end +end - end +def oldlocation(file="") + if block_given? + TempSpace.oldlocation { yield } + else + TempSpace.oldlocation(file) + end +end + +def newlocation(file="") + if block_given? + TempSpace.newlocation { yield } + else + TempSpace.newlocation(file) end end if JustExtract Extract.new.extract else - TempSpace.new.run + if ToTar + MakeTar.new.extract + else + TempSpace.new.extract + + newlocation do + load "init.rb" + end + end end diff -ur tar2rubyscript-0.3.5.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.6.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.5.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-10-28 22:47:30.000000000 +0100 +++ tar2rubyscript-0.3.6.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-11-08 19:22:36.000000000 +0100 @@ -191,7 +191,7 @@ @@tempspace = self - @newdir=@tempdir + @newdir = @tempdir end def extract @@ -358,6 +358,8 @@ else TempSpace.new.extract + $0 = "./init.rb" + newlocation do load "init.rb" end diff -ur tar2rubyscript-0.3.6.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.7.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.6.tar.gz/tar2rubyscript/tarrubyscript.rb 2003-11-08 19:22:36.000000000 +0100 +++ tar2rubyscript-0.3.7.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-02-22 10:50:03.000000000 +0100 @@ -43,9 +43,9 @@ GNAMELEN = 32 DEVLEN = 8 -TMAGIC = 'ustar' -GNU_TMAGIC = 'ustar ' -SOLARIS_TMAGIC = 'ustar00' +TMAGIC = "ustar" +GNU_TMAGIC = "ustar " +SOLARIS_TMAGIC = "ustar\00000" MAGICS = [TMAGIC, GNU_TMAGIC, SOLARIS_TMAGIC] @@ -162,7 +162,7 @@ raise "Couldn't determine a real value for a field (#{field})" end - raise "Magic header value '#{@magic}' is invalid." if not MAGICS.include?(@magic) + raise "Magic header value #{@magic.inspect} is invalid." if not MAGICS.include?(@magic) @linkflag = LF_FILE if @linkflag == LF_OLDFILE or @linkflag == LF_CONTIG @linkflag = LF_DIR if @name[-1] == '/' and @linkflag == LF_FILE diff -ur tar2rubyscript-0.3.7.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.7.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-02-22 10:50:03.000000000 +0100 +++ tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-03-26 14:35:19.000000000 +0100 @@ -326,11 +326,11 @@ class MakeTar def initialize @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift - @tarfile = $0.gsub(/\.rb$/, ".tar") + @tarfile = $0.gsub(/\.rbw?$/, "") + ".tar" end def extract - File.open(@tarfile, "wb") {|f| f.write @archive} + File.open(@tarfile, "wb") {|f| f.write @archive} end end diff -ur tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb --- tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2004-03-26 15:12:40.000000000 +0100 +++ tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2004-12-03 23:13:40.000000000 +0100 @@ -1,11 +1,34 @@ -ENV["OLDDIR"] = Dir.pwd if not ENV.include?("OLDDIR") -ENV["NEWDIR"] = Dir.pwd if not ENV.include?("NEWDIR") +temp = (ENV["TMPDIR"] or ENV["TMP"] or ENV["TEMP"] or "/tmp").gsub(/\\/, "/") +dir = "#{temp}/oldandnewlocation.#{Process.pid}" + +ENV["OLDDIR"] = Dir.pwd unless ENV.include?("OLDDIR") +ENV["NEWDIR"] = File.dirname($0) unless ENV.include?("NEWDIR") +ENV["TEMPDIR"] = dir unless ENV.include?("TEMPDIR") + +class Dir + def self.rm_rf(entry) + if File.ftype(entry) == "directory" + pdir = Dir.pwd + + Dir.chdir(entry) + Dir.new(".").each do |e| + Dir.rm_rf(e) if not [".", ".."].include?(e) + end + Dir.chdir(pdir) + + Dir.delete(entry) + else + File.delete(entry) + end + end +end begin oldlocation rescue NameError def oldlocation(file="") dir = ENV["OLDDIR"] + res = nil if block_given? pdir = Dir.pwd @@ -14,7 +37,7 @@ res = yield Dir.chdir(pdir) else - res = File.expand_path(file, dir) if not file.nil? + res = File.expand_path(file, dir) unless file.nil? end res @@ -26,6 +49,41 @@ rescue NameError def newlocation(file="") dir = ENV["NEWDIR"] + res = nil + + if block_given? + pdir = Dir.pwd + + Dir.chdir(dir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, dir) unless file.nil? + end + + res + end +end + +begin + tmplocation +rescue NameError + dir = ENV["TEMPDIR"] + + Dir.rm_rf(dir) if File.directory?(dir) + Dir.mkdir(dir) + + at_exit do + if File.directory?(dir) + Dir.chdir(dir) + Dir.chdir("..") + Dir.rm_rf(dir) + end + end + + def tmplocation(file="") + dir = ENV["TEMPDIR"] + res = nil if block_given? pdir = Dir.pwd @@ -34,7 +92,7 @@ res = yield Dir.chdir(pdir) else - res = File.expand_path(file, dir) if not file.nil? + res = File.expand_path(file, dir) unless file.nil? end res diff -ur tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/init.rb 2004-03-20 18:42:23.000000000 +0100 +++ tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/init.rb 2004-12-03 23:09:07.000000000 +0100 @@ -1,46 +1,61 @@ require "ev/oldandnewlocation" +exit if ARGV.include?("--tar2rubyscript-exit") + scriptfile = "tarrubyscript.rb" tarfile = oldlocation(ARGV.shift) rbfile = oldlocation(ARGV.shift) licensefile = oldlocation(ARGV.shift) if tarfile.nil? + $stderr.puts <<-EOF + + Usage: ruby init.rb application.tar [application.rb [licence.txt]] + or + ruby init.rb application[/] [application.rb [licence.txt]] + + If \"application.rb\" is not provided or equals to \"-\", it will + be derived from \"application.tar\" or \"application/\". + + If a license is provided, it will be put at the beginning of + The Application. + + For more information, see + http://www.erikveen.dds.nl/tar2rubyscript/index.html . + EOF + exit 1 end tarfile.dup.gsub!(/[\/\\]$/, "") -if not FileTest.exist?(tarfile) +if not File.exist?(tarfile) $stderr.puts "#{tarfile} doesn't exist." exit end -if not licensefile.nil? and not FileTest.file?(licensefile) +if not licensefile.nil? and not licensefile.empty? and not File.file?(licensefile) $stderr.puts "#{licensefile} doesn't exist." exit end -script = nil -archive = nil - -File.open(scriptfile) {|f| script = f.read} +script = File.open(scriptfile){|f| f.read} -if FileTest.file?(tarfile) - File.open(tarfile, "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} +if File.file?(tarfile) + archive = File.open(tarfile, "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} end -if FileTest.directory?(tarfile) - orgdir = Dir.pwd +if File.directory?(tarfile) + pdir = Dir.pwd Dir.chdir(tarfile) - if FileTest.file?("tar2rubyscript.bat") + if File.file?("tar2rubyscript.bat") $stderr.puts "\".\\tar2rubyscript.bat\"" system(".\\tar2rubyscript.bat") end - if FileTest.file?("tar2rubyscript.sh") + if File.file?("tar2rubyscript.sh") $stderr.puts "\". ./tar2rubyscript.sh\"" system("sh -c \". ./tar2rubyscript.sh\"") end @@ -49,17 +64,17 @@ begin tar = "tar" - IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + archive = IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} rescue tar = newlocation("tar.exe") - IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb") {|f| archive = [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + archive = IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} end - Dir.chdir(orgdir) + Dir.chdir(pdir) end -if not licensefile.nil? - lic = nil ; File.open(licensefile) {|f| lic = f.readlines} +if not licensefile.nil? and not licensefile.empty? + lic = File.open(licensefile){|f| f.readlines} lic.collect! do |line| line.gsub!(/[\r\n]/, "") diff -ur tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/README tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/README --- tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/README 2003-10-19 19:17:19.000000000 +0200 +++ tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/README 2004-12-03 23:10:19.000000000 +0100 @@ -1,6 +1,10 @@ -Usage: ruby init.rb application.tar [application.rb [licence.txt]] - or - ruby init.rb application[/] [application.rb [licence.txt]] +The best way to use Tar2RubyScript is the RB, not this TAR.GZ. +The latter is just for playing with the internals. Both are +available on the site. + + Usage: ruby init.rb application.tar [application.rb [licence.txt]] + or + ruby init.rb application[/] [application.rb [licence.txt]] If "application.rb" is not provided or equals to "-", it will be derived from "application.tar" or "application/". @@ -8,5 +12,8 @@ If a license is provided, it will be put at the beginning of The Application. +Parts of the code for Tar2RubyScript are based on code from +Thomas Hurst <tom@hur.st>. + For more information, see -http://www.erikveen.dds.nl/tar2rubyscript/ . +http://www.erikveen.dds.nl/tar2rubyscript/index.html . diff -ur tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.3.8.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-03-26 14:35:19.000000000 +0100 +++ tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-12-03 22:53:43.000000000 +0100 @@ -16,6 +16,9 @@ # Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA. +# Parts of this code are based on code from Thomas Hurst +# <tom@hur.st>. + # Tar2RubyScript constants JustExtract = ARGV.include?("--tar2rubyscript-justextract") @@ -59,6 +62,24 @@ LF_FIFO = '6' LF_CONTIG = '7' +class Dir + def self.rm_rf(entry) + if File.ftype(entry) == "directory" + pdir = Dir.pwd + + Dir.chdir(entry) + Dir.new(".").each do |e| + rm_rf(e) if not [".", ".."].include?(e) + end + Dir.chdir(pdir) + + Dir.delete(entry) + else + File.delete(entry) + end + end +end + class Reader def initialize(filehandle) @fp = filehandle @@ -182,7 +203,7 @@ class TempSpace def initialize - @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift @olddir = Dir.pwd temp = ENV["TEMP"] temp = "/tmp" if temp.nil? @@ -195,7 +216,7 @@ end def extract - Dir.mkdir(@tempdir) if not FileTest.exists?(@tempdir) + Dir.mkdir(@tempdir) if not File.exists?(@tempdir) newlocation do @@ -212,7 +233,7 @@ if entries.length == 1 entry = entries.shift.dup - if FileTest.directory?(entry) + if File.directory?(entry) @newdir = "#{@tempdir}/#{entry}" end end @@ -237,27 +258,17 @@ Dir.chdir(@olddir) - recursivedelete(@tempfile) - recursivedelete(@tempdir) + Dir.rm_rf(@tempfile) + Dir.rm_rf(@tempdir) end - end - def recursivedelete(entry) - if FileTest.file?(entry) - File.delete(entry) - end - - if FileTest.directory?(entry) - pdir = Dir.pwd + self + end - Dir.chdir(entry) - Dir.new(".").each do |e| - recursivedelete(e) if not [".", ".."].include?(e) - end - Dir.chdir(pdir) + def cleanup + @archive = nil - Dir.rmdir(entry) - end + self end def oldlocation(file="") @@ -307,7 +318,7 @@ class Extract def initialize - @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift temp = ENV["TEMP"] temp = "/tmp" if temp.nil? @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}" @@ -320,17 +331,33 @@ ensure File.delete(@tempfile) end + + self + end + + def cleanup + @archive = nil + + self end end class MakeTar def initialize - @archive = File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift - @tarfile = $0.gsub(/\.rbw?$/, "") + ".tar" + @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + @tarfile = File.expand_path(__FILE__).gsub(/\.rbw?$/, "") + ".tar" end def extract File.open(@tarfile, "wb") {|f| f.write @archive} + + self + end + + def cleanup + @archive = nil + + self end end @@ -351,17 +378,29 @@ end if JustExtract - Extract.new.extract + Extract.new.extract.cleanup else if ToTar - MakeTar.new.extract + MakeTar.new.extract.cleanup else - TempSpace.new.extract + TempSpace.new.extract.cleanup - $0 = "./init.rb" + $: << newlocation newlocation do - load "init.rb" + if __FILE__ == $0 + $0.replace("./init.rb") + + if File.file?("./init.rb") + load "./init.rb" + else + $stderr.puts "%s doesn't contain an init.rb ." % __FILE__ + end + else + if File.file?("./init.rb") + load "./init.rb" + end + end end end end diff -ur tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.4.1.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/init.rb 2004-12-03 23:09:07.000000000 +0100 +++ tar2rubyscript-0.4.1.tar.gz/tar2rubyscript/init.rb 2004-12-18 14:58:32.000000000 +0100 @@ -2,7 +2,7 @@ exit if ARGV.include?("--tar2rubyscript-exit") -scriptfile = "tarrubyscript.rb" +scriptfile = newlocation("tarrubyscript.rb") tarfile = oldlocation(ARGV.shift) rbfile = oldlocation(ARGV.shift) licensefile = oldlocation(ARGV.shift) diff -ur tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.1.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.4.0.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-12-03 22:53:43.000000000 +0100 +++ tar2rubyscript-0.4.1.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-12-18 12:29:29.000000000 +0100 @@ -21,6 +21,7 @@ # Tar2RubyScript constants +ShowContent = ARGV.include?("--tar2rubyscript-list") JustExtract = ARGV.include?("--tar2rubyscript-justextract") ToTar = ARGV.include?("--tar2rubyscript-totar") @@ -91,6 +92,12 @@ end end + def list + each do |entry| + entry.list + end + end + def each @fp.rewind @@ -153,6 +160,18 @@ #File.utime(Time.now, @header.mtime, @header.name) end end + + def list + if not @header.name.empty? + if @header.dir? + puts "d %s" % [@header.name] + elsif @header.file? + puts "f %s (%s)" % [@header.name, @data.length] + else + puts "Couldn't handle entry #{@header.name}" + end + end + end end class Header @@ -201,6 +220,32 @@ end end +class Content + def initialize + @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift + temp = ENV["TEMP"] + temp = "/tmp" if temp.nil? + @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}" + end + + def list + begin + File.open(@tempfile, "wb") {|f| f.write @archive} + File.open(@tempfile, "rb") {|f| Reader.new(f).list} + ensure + File.delete(@tempfile) + end + + self + end + + def cleanup + @archive = nil + + self + end +end + class TempSpace def initialize @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift @@ -377,29 +422,29 @@ end end -if JustExtract +if ShowContent + Content.new.list.cleanup +elsif JustExtract Extract.new.extract.cleanup +elsif ToTar + MakeTar.new.extract.cleanup else - if ToTar - MakeTar.new.extract.cleanup - else - TempSpace.new.extract.cleanup + TempSpace.new.extract.cleanup - $: << newlocation + $:.unshift(newlocation) - newlocation do - if __FILE__ == $0 - $0.replace("./init.rb") + newlocation do + if __FILE__ == $0 + $0.replace("./init.rb") - if File.file?("./init.rb") - load "./init.rb" - else - $stderr.puts "%s doesn't contain an init.rb ." % __FILE__ - end + if File.file?("./init.rb") + load "./init.rb" else - if File.file?("./init.rb") - load "./init.rb" - end + $stderr.puts "%s doesn't contain an init.rb ." % __FILE__ + end + else + if File.file?("./init.rb") + load "./init.rb" end end end diff -ur tar2rubyscript-0.4.1.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.4.1.tar.gz/tar2rubyscript/init.rb 2004-12-18 14:58:32.000000000 +0100 +++ tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/init.rb 2004-12-27 11:16:27.000000000 +0100 @@ -42,6 +42,8 @@ script = File.open(scriptfile){|f| f.read} if File.file?(tarfile) + $stderr.puts "Found archive..." + archive = File.open(tarfile, "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} end @@ -51,15 +53,19 @@ Dir.chdir(tarfile) if File.file?("tar2rubyscript.bat") - $stderr.puts "\".\\tar2rubyscript.bat\"" + $stderr.puts "Running tar2rubyscript.bat ..." + system(".\\tar2rubyscript.bat") end if File.file?("tar2rubyscript.sh") - $stderr.puts "\". ./tar2rubyscript.sh\"" + $stderr.puts "Running tar2rubyscript.sh ..." + system("sh -c \". ./tar2rubyscript.sh\"") end + $stderr.puts "Creating archive..." + Dir.chdir("..") begin @@ -74,6 +80,8 @@ end if not licensefile.nil? and not licensefile.empty? + $stderr.puts "Adding license..." + lic = File.open(licensefile){|f| f.readlines} lic.collect! do |line| @@ -87,6 +95,8 @@ rbfile = tarfile.gsub(/\.tar$/, "") + ".rb" if (rbfile.nil? or File.basename(rbfile) == "-") +$stderr.puts "Creating #{File.basename(rbfile)} ..." + File.open(rbfile, "wb") do |f| f.write script f.write "\n" diff -ur tar2rubyscript-0.4.1.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.4.1.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-12-18 12:29:29.000000000 +0100 +++ tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-12-26 22:15:10.000000000 +0100 @@ -21,9 +21,11 @@ # Tar2RubyScript constants -ShowContent = ARGV.include?("--tar2rubyscript-list") -JustExtract = ARGV.include?("--tar2rubyscript-justextract") -ToTar = ARGV.include?("--tar2rubyscript-totar") +unless defined?(BLOCKSIZE) + ShowContent = ARGV.include?("--tar2rubyscript-list") + JustExtract = ARGV.include?("--tar2rubyscript-justextract") + ToTar = ARGV.include?("--tar2rubyscript-totar") +end ARGV.concat [] @@ -33,35 +35,37 @@ # Tar constants -BLOCKSIZE = 512 +unless defined?(BLOCKSIZE) + BLOCKSIZE = 512 -NAMELEN = 100 -MODELEN = 8 -UIDLEN = 8 -GIDLEN = 8 -CHKSUMLEN = 8 -SIZELEN = 12 -MAGICLEN = 8 -MODTIMELEN = 12 -UNAMELEN = 32 -GNAMELEN = 32 -DEVLEN = 8 - -TMAGIC = "ustar" -GNU_TMAGIC = "ustar " -SOLARIS_TMAGIC = "ustar\00000" - -MAGICS = [TMAGIC, GNU_TMAGIC, SOLARIS_TMAGIC] - -LF_OLDFILE = '\0' -LF_FILE = '0' -LF_LINK = '1' -LF_SYMLINK = '2' -LF_CHAR = '3' -LF_BLOCK = '4' -LF_DIR = '5' -LF_FIFO = '6' -LF_CONTIG = '7' + NAMELEN = 100 + MODELEN = 8 + UIDLEN = 8 + GIDLEN = 8 + CHKSUMLEN = 8 + SIZELEN = 12 + MAGICLEN = 8 + MODTIMELEN = 12 + UNAMELEN = 32 + GNAMELEN = 32 + DEVLEN = 8 + + TMAGIC = "ustar" + GNU_TMAGIC = "ustar " + SOLARIS_TMAGIC = "ustar\00000" + + MAGICS = [TMAGIC, GNU_TMAGIC, SOLARIS_TMAGIC] + + LF_OLDFILE = '\0' + LF_FILE = '0' + LF_LINK = '1' + LF_SYMLINK = '2' + LF_CHAR = '3' + LF_BLOCK = '4' + LF_DIR = '5' + LF_FIFO = '6' + LF_CONTIG = '7' +end class Dir def self.rm_rf(entry) @@ -221,11 +225,13 @@ end class Content + @@count = 0 unless defined?(@@count) + def initialize @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift temp = ENV["TEMP"] temp = "/tmp" if temp.nil? - @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}" + @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count += 1}" end def list @@ -247,17 +253,29 @@ end class TempSpace + @@count = 0 unless defined?(@@count) + def initialize @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift @olddir = Dir.pwd temp = ENV["TEMP"] temp = "/tmp" if temp.nil? - @tempdir = "#{temp}/tar2rubyscript.d.#{Process.pid}" - @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}" + @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count += 1}" + @tempdir = "#{temp}/tar2rubyscript.d.#{Process.pid}.#{@@count}" @@tempspace = self @newdir = @tempdir + + @touchthread = + Thread.new do + loop do + sleep 60*60 + + touch(@tempdir) + touch(@tempfile) + end + end end def extract @@ -292,6 +310,7 @@ end at_exit do + @touchthread.kill # Close all File objects, opened in init.rb . @@ -316,6 +335,32 @@ self end + def touch(entry) + entry = entry.gsub!(/[\/\\]*$/, "") unless entry.nil? + + return unless File.exists?(entry) + + if File.directory?(entry) + pdir = Dir.pwd + + begin + Dir.chdir(entry) + + begin + Dir.new(".").each do |e| + touch(e) unless [".", ".."].include?(e) + end + ensure + Dir.chdir(pdir) + end + rescue Errno::EACCES => error + puts error + end + else + File.utime(Time.now, File.mtime(entry), entry) + end + end + def oldlocation(file="") if block_given? pdir = Dir.pwd @@ -362,11 +407,13 @@ end class Extract + @@count = 0 unless defined?(@@count) + def initialize @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift temp = ENV["TEMP"] temp = "/tmp" if temp.nil? - @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}" + @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count += 1}" end def extract @@ -432,6 +479,7 @@ TempSpace.new.extract.cleanup $:.unshift(newlocation) + $:.push(oldlocation) newlocation do if __FILE__ == $0 diff -ur tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/ev/ftools.rb tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/ev/ftools.rb --- tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/ev/ftools.rb 2006-03-08 17:53:05.599426354 +0100 +++ tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/ev/ftools.rb 2005-01-13 23:06:37.000000000 +0100 @@ -0,0 +1,172 @@ +require "ftools" + +class Dir + def self.copy(from, to) + if File.directory?(from) + pdir = Dir.pwd + todir = File.expand_path(to) + + File.mkpath(todir) + + Dir.chdir(from) + Dir.new(".").each do |e| + Dir.copy(e, todir+"/"+e) if not [".", ".."].include?(e) + end + Dir.chdir(pdir) + else + todir = File.dirname(File.expand_path(to)) + + File.mkpath(todir) + + File.copy(from, to) + end + end + + def self.move(from, to) + Dir.copy(from, to) + Dir.rm_rf(from) + end + + def self.rm_rf(entry) + if File.ftype(entry) == "directory" + pdir = Dir.pwd + + Dir.chdir(entry) + Dir.new(".").each do |e| + Dir.rm_rf(e) if not [".", ".."].include?(e) + end + Dir.chdir(pdir) + + begin + Dir.delete(entry) + rescue => e + $stderr.puts e.message + end + else + begin + File.delete(entry) + rescue => e + $stderr.puts e.message + end + end + end + + def self.find(entry=nil, mask=nil) + entry = "." if entry.nil? + + entry = entry.gsub(/[\/\\]*$/, "") unless entry.nil? + + mask = /^#{mask}$/i if mask.kind_of?(String) + + res = [] + + if File.directory?(entry) + pdir = Dir.pwd + + res += ["%s/" % entry] if mask.nil? or entry =~ mask + + begin + Dir.chdir(entry) + + begin + Dir.new(".").each do |e| + res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e) + end + ensure + Dir.chdir(pdir) + end + rescue Errno::EACCES => e + $stderr.puts e.message + end + else + res += [entry] if mask.nil? or entry =~ mask + end + + res + end +end + +class File + def self.rollbackup(file, mode=nil) + backupfile = file + ".RB.BACKUP" + controlfile = file + ".RB.CONTROL" + res = nil + + File.touch(file) unless File.file?(file) + + # Rollback + + if File.file?(backupfile) and File.file?(controlfile) + $stderr.puts "Restoring #{file}..." + + File.copy(backupfile, file) # Rollback from phase 3 + end + + # Reset + + File.delete(backupfile) if File.file?(backupfile) # Reset from phase 2 or 3 + File.delete(controlfile) if File.file?(controlfile) # Reset from phase 3 or 4 + + # Backup + + File.copy(file, backupfile) # Enter phase 2 + File.touch(controlfile) # Enter phase 3 + + # The real thing + + if block_given? + if mode.nil? + res = yield + else + File.open(file, mode) do |f| + res = yield(f) + end + end + end + + # Cleanup + + File.delete(backupfile) # Enter phase 4 + File.delete(controlfile) # Enter phase 5 + + # Return, like File.open + + res = File.open(file, (mode or "r")) unless block_given? + + res + end + + def self.touch(file) + if File.exists?(file) + File.utime(Time.now, File.mtime(file), file) + else + File.open(file, "a"){|f|} + end + end + + def self.which(file) + res = nil + + if windows? + file = file.gsub(/\.exe$/i, "") + ".exe" + sep = ";" + else + sep = ":" + end + + catch :stop do + ENV["PATH"].split(/#{sep}/).reverse.each do |d| + if File.directory?(d) + Dir.new(d).each do |e| + if e.downcase == file.downcase + res = File.expand_path(e, d) + throw :stop + end + end + end + end + end + + res + end +end diff -ur tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/init.rb 2004-12-27 11:16:27.000000000 +0100 +++ tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/init.rb 2005-01-11 18:03:37.000000000 +0100 @@ -1,7 +1,36 @@ +$: << File.dirname(File.expand_path(__FILE__)) + require "ev/oldandnewlocation" +require "ev/ftools" +require "rbconfig" exit if ARGV.include?("--tar2rubyscript-exit") +def backslashes(s) + s = s.gsub(/^\.\//, "").gsub(/\//, "\\\\") if windows? + s +end + +def linux? + not windows? and not cygwin? # Hack ??? +end + +def windows? + not (target_os.downcase =~ /32/).nil? # Hack ??? +end + +def cygwin? + not (target_os.downcase =~ /cyg/).nil? # Hack ??? +end + +def target_os + Config::CONFIG["target_os"] or "" +end + +PRESERVE = ARGV.include?("--tar2rubyscript-preserve") + +ARGV.delete_if{|arg| arg =~ /^--tar2rubyscript-/} + scriptfile = newlocation("tarrubyscript.rb") tarfile = oldlocation(ARGV.shift) rbfile = oldlocation(ARGV.shift) @@ -27,7 +56,8 @@ exit 1 end -tarfile.dup.gsub!(/[\/\\]$/, "") +TARMODE = File.file?(tarfile) +DIRMODE = File.directory?(tarfile) if not File.exist?(tarfile) $stderr.puts "#{tarfile} doesn't exist." @@ -41,43 +71,68 @@ script = File.open(scriptfile){|f| f.read} -if File.file?(tarfile) - $stderr.puts "Found archive..." +pdir = Dir.pwd - archive = File.open(tarfile, "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} -end +tmpdir = tmplocation(File.basename(tarfile)) + +File.mkpath(tmpdir) -if File.directory?(tarfile) - pdir = Dir.pwd +Dir.chdir(tmpdir) - Dir.chdir(tarfile) + if TARMODE and not PRESERVE + begin + tar = "tar" + system(backslashes("#{tar} xf #{tarfile}")) + rescue + tar = backslashes(newlocation("tar.exe")) + system(backslashes("#{tar} xf #{tarfile}")) + end + end + + if DIRMODE + Dir.copy(tarfile, ".") + end - if File.file?("tar2rubyscript.bat") + entries = Dir.entries(".") + entries.delete(".") + entries.delete("..") + + if entries.length == 1 + entry = entries.shift.dup + if File.directory?(entry) + Dir.chdir(entry) + end + end + + if File.file?("tar2rubyscript.bat") and windows? $stderr.puts "Running tar2rubyscript.bat ..." system(".\\tar2rubyscript.bat") end - if File.file?("tar2rubyscript.sh") + if File.file?("tar2rubyscript.sh") and (linux? or cygwin?) $stderr.puts "Running tar2rubyscript.sh ..." system("sh -c \". ./tar2rubyscript.sh\"") end - $stderr.puts "Creating archive..." +Dir.chdir("..") - Dir.chdir("..") + $stderr.puts "Creating archive..." - begin - tar = "tar" - archive = IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} - rescue - tar = newlocation("tar.exe") - archive = IO.popen("#{tar} ch #{tarfile.sub(/.*[\/\\]/, "")}", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + if TARMODE and PRESERVE + archive = File.open(tarfile, "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + else + begin + tar = "tar" + archive = IO.popen("#{tar} ch *", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + rescue + tar = backslashes(newlocation("tar.exe")) + archive = IO.popen("#{tar} ch *", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + end end - Dir.chdir(pdir) -end +Dir.chdir(pdir) if not licensefile.nil? and not licensefile.empty? $stderr.puts "Adding license..." diff -ur tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.4.2.tar.gz/tar2rubyscript/tarrubyscript.rb 2004-12-26 22:15:10.000000000 +0100 +++ tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-01-11 21:33:08.000000000 +0100 @@ -25,46 +25,55 @@ ShowContent = ARGV.include?("--tar2rubyscript-list") JustExtract = ARGV.include?("--tar2rubyscript-justextract") ToTar = ARGV.include?("--tar2rubyscript-totar") + Preserve = ARGV.include?("--tar2rubyscript-preserve") end ARGV.concat [] -ARGV.delete_if do |arg| - arg =~ /^--tar2rubyscript-/ -end +ARGV.delete_if{|arg| arg =~ /^--tar2rubyscript-/} + +ARGV << "--tar2rubyscript-preserve" if Preserve # Tar constants unless defined?(BLOCKSIZE) - BLOCKSIZE = 512 + BLOCKSIZE = 512 NAMELEN = 100 MODELEN = 8 UIDLEN = 8 GIDLEN = 8 - CHKSUMLEN = 8 + CHKSUMLEN = 8 SIZELEN = 12 - MAGICLEN = 8 - MODTIMELEN = 12 - UNAMELEN = 32 - GNAMELEN = 32 + MAGICLEN = 8 + MODTIMELEN = 12 + UNAMELEN = 32 + GNAMELEN = 32 DEVLEN = 8 TMAGIC = "ustar" - GNU_TMAGIC = "ustar " + GNU_TMAGIC = "ustar " SOLARIS_TMAGIC = "ustar\00000" MAGICS = [TMAGIC, GNU_TMAGIC, SOLARIS_TMAGIC] - LF_OLDFILE = '\0' + LF_OLDFILE = '\0' LF_FILE = '0' LF_LINK = '1' - LF_SYMLINK = '2' + LF_SYMLINK = '2' LF_CHAR = '3' - LF_BLOCK = '4' + LF_BLOCK = '4' LF_DIR = '5' LF_FIFO = '6' - LF_CONTIG = '7' + LF_CONTIG = '7' + + GNUTYPE_DUMPDIR = 'D' + GNUTYPE_LONGLINK = 'K' # Identifies the *next* file on the tape as having a long linkname. + GNUTYPE_LONGNAME = 'L' # Identifies the *next* file on the tape as having a long name. + GNUTYPE_MULTIVOL = 'M' # This is the continuation of a file that began on another volume. + GNUTYPE_NAMES = 'N' # For storing filenames that do not fit into the main header. + GNUTYPE_SPARSE = 'S' # This is for sparse files. + GNUTYPE_VOLHDR = 'V' # This file is a tape/volume header. Ignore it on extraction. end class Dir @@ -78,9 +87,17 @@ end Dir.chdir(pdir) - Dir.delete(entry) + begin + Dir.delete(entry) + rescue => e + $stderr.puts e.message + end else - File.delete(entry) + begin + File.delete(entry) + rescue => e + $stderr.puts e.message + end end end end @@ -129,12 +146,24 @@ def initialize(header, fp) @header = Header.new(header) - if @header.file? - padding = (BLOCKSIZE - (@header.size % BLOCKSIZE)) % BLOCKSIZE - - @data = fp.read(@header.size) if @header.size > 0 + readdata = + lambda do |header| + padding = (BLOCKSIZE - (header.size % BLOCKSIZE)) % BLOCKSIZE + @data = fp.read(header.size) if header.size > 0 dummy = fp.read(padding) if padding > 0 end + + readdata.call(@header) + + if @header.longname? + gnuname = @data[0..-2] + + header = fp.read(BLOCKSIZE) + @header = Header.new(header) + @header.name = gnuname + + readdata.call(@header) + end end def extract @@ -143,21 +172,19 @@ begin Dir.mkdir(@header.name, @header.mode) rescue SystemCallError => e - puts "Couldn't create dir #{@header.name}: " + e.message + $stderr.puts "Couldn't create dir #{@header.name}: " + e.message end - else - if @header.file? - begin - File.open(@header.name, "wb") do |fp| - fp.write(@data) - fp.chmod(@header.mode) - end - rescue => e - puts "Couldn't create file #{@header.name}: " + e.message + elsif @header.file? + begin + File.open(@header.name, "wb") do |fp| + fp.write(@data) + fp.chmod(@header.mode) end - else - puts "Couldn't handle entry #{@header.name}" + rescue => e + $stderr.puts "Couldn't create file #{@header.name}: " + e.message end + else + $stderr.puts "Couldn't handle entry #{@header.name} (flag=#{@header.linkflag.inspect})." end #File.chown(@header.uid, @header.gid, @header.name) @@ -168,18 +195,19 @@ def list if not @header.name.empty? if @header.dir? - puts "d %s" % [@header.name] + $stderr.puts "d %s" % [@header.name] elsif @header.file? - puts "f %s (%s)" % [@header.name, @data.length] + $stderr.puts "f %s (%s)" % [@header.name, @header.size] else - puts "Couldn't handle entry #{@header.name}" + $stderr.puts "Couldn't handle entry #{@header.name} (flag=#{@header.linkflag.inspect})." end end end end class Header - attr_reader(:name, :uid, :gid, :size, :mtime, :uname, :gname, :mode) + attr_reader(:name, :uid, :gid, :size, :mtime, :uname, :gname, :mode, :linkflag) + attr_writer(:name) def initialize(header) fields = header.unpack('A100 A8 A8 A8 A12 A12 A8 A1 A100 A8 A32 A32 A8 A8') @@ -222,6 +250,10 @@ def dir? @linkflag == LF_DIR end + + def longname? + @linkflag == GNUTYPE_LONGNAME + end end class Content @@ -279,7 +311,8 @@ end def extract - Dir.mkdir(@tempdir) if not File.exists?(@tempdir) + Dir.rm_rf(@tempdir) if File.exists?(@tempdir) + Dir.mkdir(@tempdir) newlocation do @@ -354,7 +387,7 @@ Dir.chdir(pdir) end rescue Errno::EACCES => error - puts error + $stderr.puts error end else File.utime(Time.now, File.mtime(entry), entry) @@ -481,18 +514,28 @@ $:.unshift(newlocation) $:.push(oldlocation) + s = ENV["PATH"].dup + if Dir.pwd[1..2] == ":/" # Hack ??? + s << ";#{newlocation.gsub(/\//, "\\")}" + s << ";#{oldlocation.gsub(/\//, "\\")}" + else + s << ":#{newlocation}" + s << ":#{oldlocation}" + end + ENV["PATH"] = s + newlocation do if __FILE__ == $0 - $0.replace("./init.rb") + $0.replace(File.expand_path("./init.rb")) if File.file?("./init.rb") - load "./init.rb" + load File.expand_path("./init.rb") else $stderr.puts "%s doesn't contain an init.rb ." % __FILE__ end else if File.file?("./init.rb") - load "./init.rb" + load File.expand_path("./init.rb") end end end diff -ur tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/ev/ftools.rb tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/ev/ftools.rb --- tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/ev/ftools.rb 2005-01-13 23:06:37.000000000 +0100 +++ tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/ev/ftools.rb 2005-01-19 00:06:27.000000000 +0100 @@ -28,6 +28,8 @@ end def self.rm_rf(entry) + File.chmod(0755, entry) + if File.ftype(entry) == "directory" pdir = Dir.pwd diff -ur tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb --- tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2005-01-13 23:06:37.000000000 +0100 +++ tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2005-01-19 00:06:27.000000000 +0100 @@ -7,6 +7,8 @@ class Dir def self.rm_rf(entry) + File.chmod(0755, entry) + if File.ftype(entry) == "directory" pdir = Dir.pwd @@ -16,9 +18,17 @@ end Dir.chdir(pdir) - Dir.delete(entry) + begin + Dir.delete(entry) + rescue => e + $stderr.puts e.message + end else - File.delete(entry) + begin + File.delete(entry) + rescue => e + $stderr.puts e.message + end end end end diff -ur tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.4.3.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-01-11 21:33:08.000000000 +0100 +++ tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-01-17 21:20:28.000000000 +0100 @@ -78,12 +78,14 @@ class Dir def self.rm_rf(entry) + File.chmod(0755, entry) + if File.ftype(entry) == "directory" pdir = Dir.pwd Dir.chdir(entry) Dir.new(".").each do |e| - rm_rf(e) if not [".", ".."].include?(e) + Dir.rm_rf(e) if not [".", ".."].include?(e) end Dir.chdir(pdir) diff -ur tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb --- tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2005-01-19 00:06:27.000000000 +0100 +++ tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2005-03-26 18:03:51.000000000 +0100 @@ -1,9 +1,9 @@ -temp = (ENV["TMPDIR"] or ENV["TMP"] or ENV["TEMP"] or "/tmp").gsub(/\\/, "/") +temp = File.expand_path((ENV["TMPDIR"] or ENV["TMP"] or ENV["TEMP"] or "/tmp").gsub(/\\/, "/")) dir = "#{temp}/oldandnewlocation.#{Process.pid}" -ENV["OLDDIR"] = Dir.pwd unless ENV.include?("OLDDIR") -ENV["NEWDIR"] = File.dirname($0) unless ENV.include?("NEWDIR") -ENV["TEMPDIR"] = dir unless ENV.include?("TEMPDIR") +ENV["OLDDIR"] = Dir.pwd unless ENV.include?("OLDDIR") +ENV["NEWDIR"] = File.expand_path(File.dirname($0)) unless ENV.include?("NEWDIR") +ENV["TEMPDIR"] = dir unless ENV.include?("TEMPDIR") class Dir def self.rm_rf(entry) diff -ur tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/init.rb 2005-01-17 17:41:56.000000000 +0100 +++ tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/init.rb 2005-01-29 19:41:14.000000000 +0100 @@ -123,13 +123,11 @@ if TARMODE and PRESERVE archive = File.open(tarfile, "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} else - begin - tar = "tar" - archive = IO.popen("#{tar} ch *", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} - rescue - tar = backslashes(newlocation("tar.exe")) - archive = IO.popen("#{tar} ch *", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} - end + what = "*" + what = "*.*" if windows? + tar = "tar" + tar = backslashes(newlocation("tar.exe")) if windows? + archive = IO.popen("#{tar} ch #{what}", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} end Dir.chdir(pdir) diff -ur tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/SUMMARY tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/SUMMARY --- tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/SUMMARY 2006-03-08 17:53:08.776392438 +0100 +++ tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/SUMMARY 2005-03-26 18:03:51.000000000 +0100 @@ -0,0 +1 @@ +A Tool for Distributing Ruby Applications diff -ur tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-01-17 21:20:28.000000000 +0100 +++ tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-03-11 17:10:09.000000000 +0100 @@ -265,6 +265,7 @@ @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift temp = ENV["TEMP"] temp = "/tmp" if temp.nil? + temp = File.expand_path(temp) @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count += 1}" end @@ -294,6 +295,7 @@ @olddir = Dir.pwd temp = ENV["TEMP"] temp = "/tmp" if temp.nil? + temp = File.expand_path(temp) @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count += 1}" @tempdir = "#{temp}/tar2rubyscript.d.#{Process.pid}.#{@@count}" @@ -526,6 +528,8 @@ end ENV["PATH"] = s + TAR2RUBYSCRIPT = true unless defined?(TAR2RUBYSCRIPT) + newlocation do if __FILE__ == $0 $0.replace(File.expand_path("./init.rb")) diff -ur tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/VERSION tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/VERSION --- tar2rubyscript-0.4.4.tar.gz/tar2rubyscript/VERSION 2006-03-08 17:53:08.774392459 +0100 +++ tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/VERSION 2005-03-26 18:03:51.000000000 +0100 @@ -0,0 +1 @@ +0.4.5 diff -ur tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/CHANGELOG tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/CHANGELOG --- tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/CHANGELOG 2006-03-08 17:53:10.277376504 +0100 +++ tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/CHANGELOG 2005-06-20 23:56:31.000000000 +0200 @@ -0,0 +1,193 @@ +---------------------------------------------------------------- + +0.4.6 - 21.06.2005 + +* Added both temporary directories to $: and ENV["PATH"]. + +---------------------------------------------------------------- + +0.4.5 - 23.03.2005 + +* newlocation is an absolute path. + +* ENV["TEMP"] is an absolute path. + +* Files to include are searched for with *.* instead of * (on + Windows). + +* Added TAR2RUBYSCRIPT. + +---------------------------------------------------------------- + +0.4.4 - 18.01.2005 + +* Fixed a bug concerning read-only files. + +---------------------------------------------------------------- + +0.4.3 - 13.01.2005 + +* The changes made by tar2rubyscript.bat and tar2rubyscript.sh + aren't permanent anymore. + +* tar2rubyscript.bat and tar2rubyscript.sh now work for the TAR + archive variant as well. + +* Added support for long filenames in GNU TAR archives + (GNUTYPE_LONGNAME). + +* Enhanced the deleting of the temporary files. + +* Added support for ENV["PATH"]. + +* Fixed a bug concerning multiple require-ing of (different) + init.rb's. + +* Fixed a bug concerning backslashes when creating the TAR + archive. + +---------------------------------------------------------------- + +0.4.2 - 27.12.2004 + +* Added support for multiple library RBA's. + +* Added the hourly touching of the files. + +* Added oldlocation to $: . + +---------------------------------------------------------------- + +0.4.1 - 18.12.2004 + +* Added --tar2rubyscript-list. + +* Put the temporary directory on top of $:, instead of at the + end, so the embedded libraries are preferred over the locally + installed libraries. + +* Fixed a bug when executing init.rb from within another + directory. + +---------------------------------------------------------------- + +0.4.0 - 03.12.2004 + +* Like packing related application files into one RBA + application, now you can as well pack related library files + into one RBA library. + +---------------------------------------------------------------- + +0.3.8 - 26.03.2004 + +* Under some circumstances, the Ruby script was replaced by the + tar archive when using --tar2rubyscript-totar. + +---------------------------------------------------------------- + +0.3.7 - 22.02.2004 + +* "ustar00" on Solaris isn't "ustar00", but "ustar\00000". + +---------------------------------------------------------------- + +0.3.6 - 08.11.2003 + +* Made the common test if __file__ == $0 work. + +---------------------------------------------------------------- + +0.3.5 - 29.10.2003 + +* The instance_eval solution gave me lots of troubles. Replaced + it with load. + +* --tar2rubyscript-totar added. + +---------------------------------------------------------------- + +0.3.4 - 23.10.2003 + +* I used eval has a method of the object that executes init.rb. + That wasn't a good name. Renamed it. + +* oldandnewlocation.rb added. It contains dummy procedures for + oldlocation and newlocation. + +---------------------------------------------------------------- + +0.3.3 - 17.10.2003 + +* No need of tar.exe anymore. + +---------------------------------------------------------------- + +0.3.2 - 10.10.2003 + +* The name of the output file is derived if it's not provided. + +---------------------------------------------------------------- + +0.3.1 - 04.10.2003 + +* Execution of tar2rubyscript.sh or tar2rubyscript.bat is + added. + +* Methods oldlocation and newlocation are added. + +---------------------------------------------------------------- + +0.3 - 21.09.2003 + +* Input can be a directory as well. (External tar needed!) + +---------------------------------------------------------------- + +0.2 - 14.09.2003 + +* Handling of --tar2rubyscript-* parameters is added. + +* --tar2rubyscript-justextract added. + +---------------------------------------------------------------- + +0.1.5 - 09.09.2003 + +* The ensure block (which deleted the temporary files after + evaluating init.rb) is transformed to an on_exit block. Now + the application can perform an exit and trap signals. + +---------------------------------------------------------------- + +0.1.4 - 31.08.2003 + +* After editing with edit.com on win32, files are converted + from LF to CRLF. So the CR's has to be removed. + +---------------------------------------------------------------- + +0.1.3 - 29.08.2003 + +* A much better (final?) patch for the previous bug. All open + files, opened in init.rb, are closed, before deleting them. + +---------------------------------------------------------------- + +0.1.2 - 27.08.2003 + +* A better patch for the previous bug. + +---------------------------------------------------------------- + +0.1.1 - 19.08.2003 + +* A little bug concerning file locking under Windows is fixed. + +---------------------------------------------------------------- + +0.1 - 18.08.2003 + +* First release. + +---------------------------------------------------------------- diff -ur tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb --- tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2005-03-26 18:03:51.000000000 +0100 +++ tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2005-06-20 23:58:05.000000000 +0200 @@ -1,9 +1,10 @@ temp = File.expand_path((ENV["TMPDIR"] or ENV["TMP"] or ENV["TEMP"] or "/tmp").gsub(/\\/, "/")) dir = "#{temp}/oldandnewlocation.#{Process.pid}" -ENV["OLDDIR"] = Dir.pwd unless ENV.include?("OLDDIR") -ENV["NEWDIR"] = File.expand_path(File.dirname($0)) unless ENV.include?("NEWDIR") -ENV["TEMPDIR"] = dir unless ENV.include?("TEMPDIR") +ENV["OLDDIR"] = Dir.pwd unless ENV.include?("OLDDIR") +ENV["NEWDIR"] = File.expand_path(File.dirname($0)) unless ENV.include?("NEWDIR") +ENV["OWNDIR"] = File.expand_path(File.dirname((caller[-1] or $0).gsub(/:\d+$/, ""))) unless ENV.include?("OWNDIR") +ENV["TEMPDIR"] = dir unless ENV.include?("TEMPDIR") class Dir def self.rm_rf(entry) @@ -76,6 +77,27 @@ end begin + ownlocation +rescue NameError + def ownlocation(file="") + dir = ENV["OWNDIR"] + res = nil + + if block_given? + pdir = Dir.pwd + + Dir.chdir(dir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, dir) unless file.nil? + end + + res + end +end + +begin tmplocation rescue NameError dir = ENV["TEMPDIR"] diff -ur tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/init.rb 2005-01-29 19:41:14.000000000 +0100 +++ tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/init.rb 2005-05-18 18:05:10.000000000 +0200 @@ -37,11 +37,14 @@ licensefile = oldlocation(ARGV.shift) if tarfile.nil? + usagescript = "init.rb" + usagescript = "tar2rubyscript.rb" if defined?(TAR2RUBYSCRIPT) + $stderr.puts <<-EOF - Usage: ruby init.rb application.tar [application.rb [licence.txt]] + Usage: ruby #{usagescript} application.tar [application.rb [licence.txt]] or - ruby init.rb application[/] [application.rb [licence.txt]] + ruby #{usagescript} application[/] [application.rb [licence.txt]] If \"application.rb\" is not provided or equals to \"-\", it will be derived from \"application.tar\" or \"application/\". diff -ur tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-03-11 17:10:09.000000000 +0100 +++ tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-06-16 21:08:46.000000000 +0200 @@ -426,6 +426,20 @@ res end + def tmplocation(file="") + if block_given? + pdir = Dir.pwd + + Dir.chdir(@tempdir) + res = yield + Dir.chdir(pdir) + else + res = File.expand_path(file, @tempdir) if not file.nil? + end + + res + end + def self.oldlocation(file="") if block_given? @@tempspace.oldlocation { yield } @@ -441,6 +455,14 @@ @@tempspace.newlocation(file) end end + + def self.tmplocation(file="") + if block_given? + @@tempspace.tmplocation { yield } + else + @@tempspace.tmplocation(file) + end + end end class Extract @@ -506,6 +528,14 @@ end end +def tmplocation(file="") + if block_given? + TempSpace.tmplocation { yield } + else + TempSpace.tmplocation(file) + end +end + if ShowContent Content.new.list.cleanup elsif JustExtract @@ -515,14 +545,17 @@ else TempSpace.new.extract.cleanup + $:.unshift(tmplocation) $:.unshift(newlocation) $:.push(oldlocation) s = ENV["PATH"].dup if Dir.pwd[1..2] == ":/" # Hack ??? + s << ";#{tmplocation.gsub(/\//, "\\")}" s << ";#{newlocation.gsub(/\//, "\\")}" s << ";#{oldlocation.gsub(/\//, "\\")}" else + s << ":#{tmplocation}" s << ":#{newlocation}" s << ":#{oldlocation}" end diff -ur tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/VERSION tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/VERSION --- tar2rubyscript-0.4.5.tar.gz/tar2rubyscript/VERSION 2005-03-26 18:03:51.000000000 +0100 +++ tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/VERSION 2005-06-20 23:58:05.000000000 +0200 @@ -1 +1 @@ -0.4.5 +0.4.6 diff -ur tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/CHANGELOG tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/CHANGELOG --- tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/CHANGELOG 2005-06-20 23:56:31.000000000 +0200 +++ tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/CHANGELOG 2005-06-24 01:51:23.000000000 +0200 @@ -1,5 +1,12 @@ ---------------------------------------------------------------- +0.4.7 - 24.06.2005 + +* Fixed a serious bug concerning this message: "doesn't contain + an init.rb" (Sorry...) + +---------------------------------------------------------------- + 0.4.6 - 21.06.2005 * Added both temporary directories to $: and ENV["PATH"]. diff -ur tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-06-16 21:08:46.000000000 +0200 +++ tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-06-24 02:01:28.000000000 +0200 @@ -426,7 +426,7 @@ res end - def tmplocation(file="") + def templocation(file="") if block_given? pdir = Dir.pwd @@ -456,11 +456,11 @@ end end - def self.tmplocation(file="") + def self.templocation(file="") if block_given? - @@tempspace.tmplocation { yield } + @@tempspace.templocation { yield } else - @@tempspace.tmplocation(file) + @@tempspace.templocation(file) end end end @@ -528,11 +528,11 @@ end end -def tmplocation(file="") +def templocation(file="") if block_given? - TempSpace.tmplocation { yield } + TempSpace.templocation { yield } else - TempSpace.tmplocation(file) + TempSpace.templocation(file) end end @@ -545,17 +545,17 @@ else TempSpace.new.extract.cleanup - $:.unshift(tmplocation) + $:.unshift(templocation) $:.unshift(newlocation) $:.push(oldlocation) s = ENV["PATH"].dup if Dir.pwd[1..2] == ":/" # Hack ??? - s << ";#{tmplocation.gsub(/\//, "\\")}" + s << ";#{templocation.gsub(/\//, "\\")}" s << ";#{newlocation.gsub(/\//, "\\")}" s << ";#{oldlocation.gsub(/\//, "\\")}" else - s << ":#{tmplocation}" + s << ":#{templocation}" s << ":#{newlocation}" s << ":#{oldlocation}" end diff -ur tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/VERSION tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/VERSION --- tar2rubyscript-0.4.6.tar.gz/tar2rubyscript/VERSION 2005-06-20 23:58:05.000000000 +0200 +++ tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/VERSION 2005-06-24 02:03:13.000000000 +0200 @@ -1 +1 @@ -0.4.6 +0.4.7 diff -ur tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/CHANGELOG tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/CHANGELOG --- tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/CHANGELOG 2005-06-24 01:51:23.000000000 +0200 +++ tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/CHANGELOG 2006-03-08 17:20:08.000000000 +0100 @@ -1,5 +1,16 @@ ---------------------------------------------------------------- +0.4.8 - 08.03.2006 + +* Fixed a bug concerning looping symlinks. + +* Fixed a bug concerning "Too many open files". + +* Added support for hard links and symbolic links (not on + Windows). + +---------------------------------------------------------------- + 0.4.7 - 24.06.2005 * Fixed a serious bug concerning this message: "doesn't contain diff -ur tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/ev/ftools.rb tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/ev/ftools.rb --- tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/ev/ftools.rb 2005-06-24 02:03:13.000000000 +0200 +++ tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/ev/ftools.rb 2006-03-08 17:52:37.000000000 +0100 @@ -9,8 +9,10 @@ File.mkpath(todir) Dir.chdir(from) - Dir.new(".").each do |e| - Dir.copy(e, todir+"/"+e) if not [".", ".."].include?(e) + Dir.open(".") do |dir| + dir.each do |e| + Dir.copy(e, todir+"/"+e) if not [".", ".."].include?(e) + end end Dir.chdir(pdir) else @@ -28,14 +30,19 @@ end def self.rm_rf(entry) - File.chmod(0755, entry) + begin + File.chmod(0755, entry) + rescue + end if File.ftype(entry) == "directory" pdir = Dir.pwd Dir.chdir(entry) - Dir.new(".").each do |e| - Dir.rm_rf(e) if not [".", ".."].include?(e) + Dir.open(".") do |dir| + dir.each do |e| + Dir.rm_rf(e) if not [".", ".."].include?(e) + end end Dir.chdir(pdir) @@ -71,8 +78,10 @@ Dir.chdir(entry) begin - Dir.new(".").each do |e| - res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e) + Dir.open(".") do |dir| + dir.each do |e| + res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e) + end end ensure Dir.chdir(pdir) @@ -84,7 +93,7 @@ res += [entry] if mask.nil? or entry =~ mask end - res + res.sort end end @@ -159,11 +168,44 @@ catch :stop do ENV["PATH"].split(/#{sep}/).reverse.each do |d| if File.directory?(d) - Dir.new(d).each do |e| - if e.downcase == file.downcase - res = File.expand_path(e, d) - throw :stop + Dir.open(d) do |dir| + dir.each do |e| + if (linux? and e == file) or (windows? and e.downcase == file.downcase) + res = File.expand_path(e, d) + throw :stop + end + end + end + end + end + end + + res + end + + def self.same_content?(file1, file2, blocksize=4096) + res = false + + if File.file?(file1) and File.file?(file2) + res = true + + data1 = nil + data2 = nil + + File.open(file1, "rb") do |f1| + File.open(file2, "rb") do |f2| + catch :not_the_same do + while (data1 = f1.read(blocksize)) + data2 = f2.read(blocksize) + + unless data1 == data2 + res = false + + throw :not_the_same + end end + + res = false if f2.read(blocksize) end end end diff -ur tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb --- tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2005-06-24 02:03:13.000000000 +0200 +++ tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/ev/oldandnewlocation.rb 2006-03-08 17:52:37.000000000 +0100 @@ -3,7 +3,7 @@ ENV["OLDDIR"] = Dir.pwd unless ENV.include?("OLDDIR") ENV["NEWDIR"] = File.expand_path(File.dirname($0)) unless ENV.include?("NEWDIR") -ENV["OWNDIR"] = File.expand_path(File.dirname((caller[-1] or $0).gsub(/:\d+$/, ""))) unless ENV.include?("OWNDIR") +ENV["APPDIR"] = File.expand_path(File.dirname((caller[-1] or $0).gsub(/:\d+$/, ""))) unless ENV.include?("APPDIR") ENV["TEMPDIR"] = dir unless ENV.include?("TEMPDIR") class Dir @@ -14,8 +14,10 @@ pdir = Dir.pwd Dir.chdir(entry) - Dir.new(".").each do |e| - Dir.rm_rf(e) if not [".", ".."].include?(e) + Dir.open(".") do |dir| + dir.each do |e| + Dir.rm_rf(e) if not [".", ".."].include?(e) + end end Dir.chdir(pdir) @@ -77,10 +79,10 @@ end begin - ownlocation + applocation rescue NameError - def ownlocation(file="") - dir = ENV["OWNDIR"] + def applocation(file="") + dir = ENV["APPDIR"] res = nil if block_given? diff -ur tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/init.rb tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/init.rb --- tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/init.rb 2005-06-24 01:18:21.000000000 +0200 +++ tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/init.rb 2006-02-04 00:14:13.000000000 +0100 @@ -93,7 +93,15 @@ end if DIRMODE - Dir.copy(tarfile, ".") + dir = File.dirname(tarfile) + file = File.basename(tarfile) + begin + tar = "tar" + system(backslashes("#{tar} c -C #{dir} #{file} | #{tar} x")) + rescue + tar = backslashes(newlocation("tar.exe")) + system(backslashes("#{tar} c -C #{dir} #{file} | #{tar} x")) + end end entries = Dir.entries(".") @@ -130,7 +138,7 @@ what = "*.*" if windows? tar = "tar" tar = backslashes(newlocation("tar.exe")) if windows? - archive = IO.popen("#{tar} ch #{what}", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} + archive = IO.popen("#{tar} c #{what}", "rb"){|f| [f.read].pack("m").split("\n").collect{|s| "# " + s}.join("\n")} end Dir.chdir(pdir) diff -ur tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/LICENSE tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/LICENSE --- tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/LICENSE 2003-10-19 18:43:27.000000000 +0200 +++ tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/LICENSE 2005-06-26 13:05:01.000000000 +0200 @@ -13,3 +13,6 @@ # License along with this program; if not, write to the Free # Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA. +# +# Parts of the code for Tar2RubyScript are based on code from +# Thomas Hurst <tom@hur.st>. diff -ur tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/README tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/README --- tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/README 2004-12-03 23:10:19.000000000 +0100 +++ tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/README 2005-08-06 09:05:44.000000000 +0200 @@ -1,19 +1,24 @@ -The best way to use Tar2RubyScript is the RB, not this TAR.GZ. -The latter is just for playing with the internals. Both are -available on the site. +---------------------------------------------------------------- - Usage: ruby init.rb application.tar [application.rb [licence.txt]] - or - ruby init.rb application[/] [application.rb [licence.txt]] +Tar2RubyScript transforms a directory tree, containing your +application, into one single Ruby script, along with some code +to handle this archive. This script can be distributed to our +friends. When they've installed Ruby, they just have to double +click on it and your application is up and running! -If "application.rb" is not provided or equals to "-", it will -be derived from "application.tar" or "application/". +So, it's a way of executing your application, not of installing +it. You might think of it as the Ruby version of Java's JAR... +Let's call it an RBA (Ruby Archive). -If a license is provided, it will be put at the beginning of -The Application. - -Parts of the code for Tar2RubyScript are based on code from -Thomas Hurst <tom@hur.st>. +"It's Ruby's JAR..." For more information, see http://www.erikveen.dds.nl/tar2rubyscript/index.html . + +---------------------------------------------------------------- + +The best way to use Tar2RubyScript is the RB, not this TAR.GZ. +The latter is just for playing with the internals. Both are +available on the site. + +---------------------------------------------------------------- diff -ur tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/tarrubyscript.rb --- tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/tarrubyscript.rb 2005-06-24 02:01:28.000000000 +0200 +++ tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/tarrubyscript.rb 2006-02-04 00:53:35.000000000 +0100 @@ -78,14 +78,19 @@ class Dir def self.rm_rf(entry) - File.chmod(0755, entry) + begin + File.chmod(0755, entry) + rescue + end if File.ftype(entry) == "directory" pdir = Dir.pwd Dir.chdir(entry) - Dir.new(".").each do |e| - Dir.rm_rf(e) if not [".", ".."].include?(e) + Dir.open(".") do |d| + d.each do |e| + Dir.rm_rf(e) if not [".", ".."].include?(e) + end end Dir.chdir(pdir) @@ -170,7 +175,19 @@ def extract if not @header.name.empty? - if @header.dir? + if @header.symlink? + begin + File.symlink(@header.linkname, @header.name) + rescue SystemCallError => e + $stderr.puts "Couldn't create symlink #{@header.name}: " + e.message + end + elsif @header.link? + begin + File.link(@header.linkname, @header.name) + rescue SystemCallError => e + $stderr.puts "Couldn't create link #{@header.name}: " + e.message + end + elsif @header.dir? begin Dir.mkdir(@header.name, @header.mode) rescue SystemCallError => e @@ -196,7 +213,11 @@ def list if not @header.name.empty? - if @header.dir? + if @header.symlink? + $stderr.puts "s %s -> %s" % [@header.name, @header.linkname] + elsif @header.link? + $stderr.puts "l %s -> %s" % [@header.name, @header.linkname] + elsif @header.dir? $stderr.puts "d %s" % [@header.name] elsif @header.file? $stderr.puts "f %s (%s)" % [@header.name, @header.size] @@ -208,7 +229,7 @@ end class Header - attr_reader(:name, :uid, :gid, :size, :mtime, :uname, :gname, :mode, :linkflag) + attr_reader(:name, :uid, :gid, :size, :mtime, :uname, :gname, :mode, :linkflag, :linkname) attr_writer(:name) def initialize(header) @@ -230,6 +251,7 @@ @name, @mode, @uid, @gid, @size, @mtime, @chksum, @linkflag, @linkname, @magic, @uname, @gname, @devmajor, @devminor = converted @name.gsub!(/^\.\//, "") + @linkname.gsub!(/^\.\//, "") @raw = header rescue ArgumentError => e @@ -239,10 +261,8 @@ raise "Magic header value #{@magic.inspect} is invalid." if not MAGICS.include?(@magic) @linkflag = LF_FILE if @linkflag == LF_OLDFILE or @linkflag == LF_CONTIG - @linkflag = LF_DIR if @name[-1] == '/' and @linkflag == LF_FILE - @linkname = @linkname[1,-1] if @linkname[0] == '/' + @linkflag = LF_DIR if @linkflag == LF_FILE and @name[-1] == '/' @size = 0 if @size < 0 - @name = @linkname + '/' + @name if @linkname.size > 0 end def file? @@ -253,6 +273,14 @@ @linkflag == LF_DIR end + def symlink? + @linkflag == LF_SYMLINK + end + + def link? + @linkflag == LF_LINK + end + def longname? @linkflag == GNUTYPE_LONGNAME end @@ -262,11 +290,13 @@ @@count = 0 unless defined?(@@count) def initialize + @@count += 1 + @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift temp = ENV["TEMP"] temp = "/tmp" if temp.nil? temp = File.expand_path(temp) - @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count += 1}" + @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count}" end def list @@ -291,12 +321,14 @@ @@count = 0 unless defined?(@@count) def initialize + @@count += 1 + @archive = File.open(File.expand_path(__FILE__), "rb"){|f| f.read}.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift @olddir = Dir.pwd temp = ENV["TEMP"] temp = "/tmp" if temp.nil? temp = File.expand_path(temp) - @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count += 1}" + @tempfile = "#{temp}/tar2rubyscript.f.#{Process.pid}.#{@@count}" @tempdir = "#{temp}/tar2rubyscript.d.#{Process.pid}.#{@@count}" @@tempspace = self @@ -384,8 +416,10 @@ Dir.chdir(entry) begin - Dir.new(".").each do |e| - touch(e) unless [".", ".."].include?(e) + Dir.open(".") do |d| + d.each do |e| + touch(e) unless [".", ".."].include?(e) + end end ensure Dir.chdir(pdir) @@ -549,6 +583,8 @@ $:.unshift(newlocation) $:.push(oldlocation) + verbose = $VERBOSE + $VERBOSE = nil s = ENV["PATH"].dup if Dir.pwd[1..2] == ":/" # Hack ??? s << ";#{templocation.gsub(/\//, "\\")}" @@ -560,6 +596,7 @@ s << ":#{oldlocation}" end ENV["PATH"] = s + $VERBOSE = verbose TAR2RUBYSCRIPT = true unless defined?(TAR2RUBYSCRIPT) diff -ur tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/VERSION tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/VERSION --- tar2rubyscript-0.4.7.tar.gz/tar2rubyscript/VERSION 2005-06-24 02:03:13.000000000 +0200 +++ tar2rubyscript-0.4.8.tar.gz/tar2rubyscript/VERSION 2006-03-08 17:52:37.000000000 +0100 @@ -1 +1 @@ -0.4.7 +0.4.8