[rubygems/rubygems] Fix resolver edge case

Let it deal with legacy gems with equivalent version and different
dependencies.

https://github.com/rubygems/rubygems/commit/b430babe97
This commit is contained in:
David Rodríguez 2023-01-07 18:57:45 +01:00 committed by Hiroshi SHIBATA
parent 97d52a8ea2
commit 2e0159c5f2
2 changed files with 28 additions and 1 deletions

View File

@ -215,7 +215,7 @@ module Bundler
def all_versions_for(package)
name = package.name
results = (@base[name] + @all_specs[name]).uniq(&:full_name)
results = (@base[name] + @all_specs[name]).uniq {|spec| [spec.version.hash, spec.platform] }
locked_requirement = base_requirements[name]
results = filter_matching_specs(results, locked_requirement) if locked_requirement

View File

@ -1076,4 +1076,31 @@ RSpec.describe "bundle install with gem sources" do
G
end
end
context "when a gem has equivalent versions with inconsistent dependencies" do
before do
build_repo4 do
build_gem "autobuild", "1.10.rc2" do |s|
s.add_dependency "utilrb", ">= 1.6.0"
end
build_gem "autobuild", "1.10.0.rc2" do |s|
s.add_dependency "utilrb", ">= 2.0"
end
end
end
it "does not crash unexpectedly" do
gemfile <<~G
source "#{file_uri_for(gem_repo4)}"
gem "autobuild", "1.10.rc2"
G
bundle "install --jobs 1", :raise_on_error => false
expect(err).not_to include("ERROR REPORT TEMPLATE")
expect(err).to include("Could not find compatible versions")
end
end
end