diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-07-01 21:50:14 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-07-01 21:50:14 +0000 |
commit | effdbf5936cc090a618e13c8f9a1b5412ebab2fa (patch) | |
tree | c8410a18cbbe7ad013470fc06fef0c75ce0fd230 /lib/rubygems/package | |
parent | 9c4ef4b191a1e6b9abdbb21c7c709d1d0f2397e6 (diff) | |
download | ruby-effdbf5936cc090a618e13c8f9a1b5412ebab2fa.tar.gz |
* lib/rubygems: Update to RubyGems HEAD(c202db2).
this version contains many enhancements see http://git.io/vtNwF
* test/rubygems: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51092 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems/package')
-rw-r--r-- | lib/rubygems/package/old.rb | 4 | ||||
-rw-r--r-- | lib/rubygems/package/tar_reader/entry.rb | 8 | ||||
-rw-r--r-- | lib/rubygems/package/tar_test_case.rb | 15 | ||||
-rw-r--r-- | lib/rubygems/package/tar_writer.rb | 20 |
4 files changed, 40 insertions, 7 deletions
diff --git a/lib/rubygems/package/old.rb b/lib/rubygems/package/old.rb index d7b228d893..bcf60a00c9 100644 --- a/lib/rubygems/package/old.rb +++ b/lib/rubygems/package/old.rb @@ -18,14 +18,14 @@ class Gem::Package::Old < Gem::Package # Creates a new old-format package reader for +gem+. Old-format packages # cannot be written. - def initialize gem + def initialize gem, security_policy require 'fileutils' require 'zlib' Gem.load_yaml @contents = nil @gem = gem - @security_policy = nil + @security_policy = security_policy @spec = nil end diff --git a/lib/rubygems/package/tar_reader/entry.rb b/lib/rubygems/package/tar_reader/entry.rb index 737c7639c6..1d917a81ac 100644 --- a/lib/rubygems/package/tar_reader/entry.rb +++ b/lib/rubygems/package/tar_reader/entry.rb @@ -103,6 +103,13 @@ class Gem::Package::TarReader::Entry end ## + # Is this tar entry a symlink? + + def symlink? + @header.typeflag == "2" + end + + ## # The position in the tar entry def pos @@ -144,4 +151,3 @@ class Gem::Package::TarReader::Entry end end - diff --git a/lib/rubygems/package/tar_test_case.rb b/lib/rubygems/package/tar_test_case.rb index 5253e32f36..b2d6f4ea77 100644 --- a/lib/rubygems/package/tar_test_case.rb +++ b/lib/rubygems/package/tar_test_case.rb @@ -71,7 +71,7 @@ class Gem::Package::TarTestCase < Gem::TestCase SP(Z(to_oct(sum, 6))) end - def header(type, fname, dname, length, mode, mtime, checksum = nil) + def header(type, fname, dname, length, mode, mtime, checksum = nil, linkname = "") checksum ||= " " * 8 arr = [ # struct tarfile_entry_posix @@ -83,7 +83,7 @@ class Gem::Package::TarTestCase < Gem::TestCase Z(to_oct(mtime, 11)), # char mtime[12]; 0 padded, octal, null checksum, # char checksum[8]; 0 padded, octal, null, space type, # char typeflag[1]; file: "0" dir: "5" - "\0" * 100, # char linkname[100]; ASCII + (Z unless filled) + ASCIIZ(linkname, 100), # char linkname[100]; ASCII + (Z unless filled) "ustar\0", # char magic[6]; "ustar\0" "00", # char version[2]; "00" ASCIIZ("wheel", 32), # char uname[32]; ASCIIZ @@ -117,6 +117,12 @@ class Gem::Package::TarTestCase < Gem::TestCase header("0", fname, dname, length, mode, mtime, checksum) end + def tar_symlink_header(fname, prefix, mode, mtime, linkname) + h = header("2", fname, prefix, 0, mode, mtime, nil, linkname) + checksum = calc_checksum(h) + header("2", fname, prefix, 0, mode, mtime, checksum, linkname) + end + def to_oct(n, pad_size) "%0#{pad_size}o" % n end @@ -133,5 +139,8 @@ class Gem::Package::TarTestCase < Gem::TestCase util_entry tar_dir_header("foo", "bar", 0, Time.now) end -end + def util_symlink_entry + util_entry tar_symlink_header("foo", "bar", 0, Time.now, "link") + end +end diff --git a/lib/rubygems/package/tar_writer.rb b/lib/rubygems/package/tar_writer.rb index dfd635724b..fff02e9235 100644 --- a/lib/rubygems/package/tar_writer.rb +++ b/lib/rubygems/package/tar_writer.rb @@ -234,6 +234,25 @@ class Gem::Package::TarWriter end ## + # Adds symlink +name+ with permissions +mode+, linking to +target+. + + def add_symlink(name, target, mode) + check_closed + + name, prefix = split_name name + + header = Gem::Package::TarHeader.new(:name => name, :mode => mode, + :size => 0, :typeflag => "2", + :linkname => target, + :prefix => prefix, + :mtime => Time.now).to_s + + @io.write header + + self + end + + ## # Raises IOError if the TarWriter is closed def check_closed @@ -323,4 +342,3 @@ class Gem::Package::TarWriter end end - |