summaryrefslogtreecommitdiff
path: root/lib/rubygems/package.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/package.rb')
-rw-r--r--lib/rubygems/package.rb24
1 files changed, 18 insertions, 6 deletions
diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb
index e8b8b38b06..64beae5550 100644
--- a/lib/rubygems/package.rb
+++ b/lib/rubygems/package.rb
@@ -123,7 +123,7 @@ class Gem::Package
# If +gem+ is an existing file in the old format a Gem::Package::Old will be
# returned.
- def self.new gem
+ def self.new gem, security_policy = nil
gem = if gem.is_a?(Gem::Package::Source)
gem
elsif gem.respond_to? :read
@@ -132,7 +132,7 @@ class Gem::Package
Gem::Package::FileSource.new gem
end
- return super(gem) unless Gem::Package == self
+ return super unless Gem::Package == self
return super unless gem.present?
return super unless gem.start
@@ -144,7 +144,7 @@ class Gem::Package
##
# Creates a new package that will read or write to the file +gem+.
- def initialize gem # :notnew:
+ def initialize gem, security_policy # :notnew:
@gem = gem
@build_time = Time.now
@@ -152,13 +152,20 @@ class Gem::Package
@contents = nil
@digests = Hash.new { |h, algorithm| h[algorithm] = {} }
@files = nil
- @security_policy = nil
+ @security_policy = security_policy
@signatures = {}
@signer = nil
@spec = nil
end
##
+ # Copies this package to +path+ (if possible)
+
+ def copy_to path
+ FileUtils.cp @gem.path, path unless File.exist? path
+ end
+
+ ##
# Adds a checksum for each entry in the gem to checksums.yaml.gz.
def add_checksums tar
@@ -200,7 +207,11 @@ class Gem::Package
def add_files tar # :nodoc:
@spec.files.each do |file|
- stat = File.stat file
+ stat = File.lstat file
+
+ if stat.symlink?
+ tar.add_symlink file, File.readlink(file), stat.mode
+ end
next unless stat.file?
@@ -371,6 +382,8 @@ EOM
FileUtils.chmod entry.header.mode, destination
end if entry.file?
+ File.symlink(install_location(entry.header.linkname, destination_dir), destination) if entry.symlink?
+
verbose destination
end
end
@@ -611,4 +624,3 @@ require 'rubygems/package/tar_header'
require 'rubygems/package/tar_reader'
require 'rubygems/package/tar_reader/entry'
require 'rubygems/package/tar_writer'
-