aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rubygems/request_set/gem_dependency_api.rb
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-08 01:22:39 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-08 01:22:39 +0000
commit7ed9b794b4e3f3f9874f2ce19401461596d8a2c0 (patch)
tree5caaf13685de34b09d2949709a77b4c650b62741 /lib/rubygems/request_set/gem_dependency_api.rb
parent866b438c21ff05dfeabba8bc9aa9850e415be607 (diff)
downloadruby-7ed9b794b4e3f3f9874f2ce19401461596d8a2c0.tar.gz
* lib/rubygems: Update to RubyGems master 14749ce. This fixes bugs
handling of gem dependencies lockfiles (Gemfile.lock). * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems/request_set/gem_dependency_api.rb')
-rw-r--r--lib/rubygems/request_set/gem_dependency_api.rb42
1 files changed, 25 insertions, 17 deletions
diff --git a/lib/rubygems/request_set/gem_dependency_api.rb b/lib/rubygems/request_set/gem_dependency_api.rb
index 0c27b1a61a..efce979177 100644
--- a/lib/rubygems/request_set/gem_dependency_api.rb
+++ b/lib/rubygems/request_set/gem_dependency_api.rb
@@ -221,13 +221,7 @@ class Gem::RequestSet::GemDependencyAPI
return unless (groups & @without_groups).empty?
- unless source_set then
- raise ArgumentError,
- "duplicate source (default) for gem #{name}" if
- @gem_sources.include? name
-
- @gem_sources[name] = :default
- end
+ pin_gem_source name, :default unless source_set
gem_requires name, options
@@ -246,9 +240,7 @@ class Gem::RequestSet::GemDependencyAPI
return unless repository = options.delete(:git)
- raise ArgumentError,
- "duplicate source git: #{repository} for gem #{name}" if
- @gem_sources.include? name
+ pin_gem_source name, :git, repository
reference = nil
reference ||= options.delete :ref
@@ -260,8 +252,6 @@ class Gem::RequestSet::GemDependencyAPI
@git_set.add_git_gem name, repository, reference, submodules
- @gem_sources[name] = repository
-
true
end
@@ -310,14 +300,10 @@ class Gem::RequestSet::GemDependencyAPI
def gem_path name, options # :nodoc:
return unless directory = options.delete(:path)
- raise ArgumentError,
- "duplicate source path: #{directory} for gem #{name}" if
- @gem_sources.include? name
+ pin_gem_source name, :path, directory
@vendor_set.add_vendor_gem name, directory
- @gem_sources[name] = directory
-
true
end
@@ -430,6 +416,28 @@ class Gem::RequestSet::GemDependencyAPI
end
##
+ # Pins the gem +name+ to the given +source+. Adding a gem with the same
+ # name from a different +source+ will raise an exception.
+
+ def pin_gem_source name, type = :default, source = nil
+ source_description =
+ case type
+ when :default then '(default)'
+ when :path then "path: #{source}"
+ when :git then "git: #{source}"
+ else '(unknown)'
+ end
+
+ raise ArgumentError,
+ "duplicate source #{source_description} for gem #{name}" if
+ @gem_sources.fetch(name, source) != source
+
+ @gem_sources[name] = source
+ end
+
+ private :pin_gem_source
+
+ ##
# :category: Gem Dependencies DSL
#
# Block form for restricting gems to a particular platform.