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