diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 6037148294..403ce825d3 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -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 diff --git a/spec/bundler/commands/install_spec.rb b/spec/bundler/commands/install_spec.rb index 56945346e1..f572bdf176 100644 --- a/spec/bundler/commands/install_spec.rb +++ b/spec/bundler/commands/install_spec.rb @@ -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