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