diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-12-08 01:22:39 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-12-08 01:22:39 +0000 |
commit | 7ed9b794b4e3f3f9874f2ce19401461596d8a2c0 (patch) | |
tree | 5caaf13685de34b09d2949709a77b4c650b62741 /lib/rubygems/request_set/gem_dependency_api.rb | |
parent | 866b438c21ff05dfeabba8bc9aa9850e415be607 (diff) | |
download | ruby-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.rb | 42 |
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. |