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