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