summaryrefslogtreecommitdiff
path: root/lib/bundler
diff options
context:
space:
mode:
authorDavid Rodríguez <deivid.rodriguez@riseup.net>2021-12-20 19:54:08 +0100
committergit <svn-admin@ruby-lang.org>2021-12-22 03:12:57 +0900
commitb86a7ba49252e00e19c22bbcdc821b5acc31ff92 (patch)
tree850ff2f78cf824780a87b7236a077fd1481de603 /lib/bundler
parentef973aa7aa65143a4f05d623c016d459426770d0 (diff)
[rubygems/rubygems] Fix error when gem specified twice in gemfile under different platforms
https://github.com/rubygems/rubygems/commit/83bc87ca98
Diffstat (limited to 'lib/bundler')
-rw-r--r--lib/bundler/definition.rb16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index 9a94bd3ed3..19e5569fad 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -87,10 +87,11 @@ module Bundler
@platforms = @locked_platforms.dup
@locked_bundler_version = @locked_gems.bundler_version
@locked_ruby_version = @locked_gems.ruby_version
+ @originally_locked_specs = SpecSet.new(@locked_gems.specs)
if unlock != true
@locked_deps = @locked_gems.dependencies
- @locked_specs = SpecSet.new(@locked_gems.specs)
+ @locked_specs = @originally_locked_specs
@locked_sources = @locked_gems.sources
else
@unlock = {}
@@ -691,13 +692,16 @@ module Bundler
def converge_specs(specs)
deps = []
converged = []
- specs.each do |s|
- # Replace the locked dependency's source with the equivalent source from the Gemfile
- dep = @dependencies.find {|d| s.satisfies?(d) }
- if dep && (!dep.source || s.source.include?(dep.source))
+ @dependencies.each do |dep|
+ if specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
deps << dep
end
+ end
+
+ specs.each do |s|
+ # Replace the locked dependency's source with the equivalent source from the Gemfile
+ dep = @dependencies.find {|d| s.satisfies?(d) }
s.source = (dep && dep.source) || sources.get(s.source) || sources.default_source unless Bundler.frozen_bundle?
@@ -830,7 +834,7 @@ module Bundler
def additional_base_requirements_for_resolve
return [] unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
- converge_specs(@locked_gems.specs).map do |locked_spec|
+ converge_specs(@originally_locked_specs).map do |locked_spec|
name = locked_spec.name
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
DepProxy.get_proxy(dep, locked_spec.platform)