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