diff options
| author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2024-07-04 22:09:34 +0200 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-07-09 16:34:07 +0000 |
| commit | 5fdfdc30f155ac41f865d4a0ae9ee37f1371fd7f (patch) | |
| tree | 2b58ade6cbc0f757cdbb684d08062a38490be8fd | |
| parent | a333e867aa24a37bf962e7d1b941078790a75efd (diff) | |
[rubygems/rubygems] Let resolver consider unique specs from the beginning
It results in more consistent error messages.
https://github.com/rubygems/rubygems/commit/a4b34361cc
| -rw-r--r-- | lib/bundler/resolver.rb | 3 | ||||
| -rw-r--r-- | spec/bundler/commands/lock_spec.rb | 27 |
2 files changed, 7 insertions, 23 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 1a6711ea6f..ba52712d15 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -79,7 +79,7 @@ module Bundler def solve_versions(root:, logger:) solver = PubGrub::VersionSolver.new(source: self, root: root, logger: logger) result = solver.solve - result.map {|package, version| version.to_specs(package) }.flatten.uniq + result.map {|package, version| version.to_specs(package) }.flatten rescue PubGrub::SolveFailure => e incompatibility = e.incompatibility @@ -270,6 +270,7 @@ module Bundler end platform_specs.flatten! + platform_specs.uniq! ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY) groups << Resolver::Candidate.new(version, specs: ruby_specs) if ruby_specs.any? diff --git a/spec/bundler/commands/lock_spec.rb b/spec/bundler/commands/lock_spec.rb index 8841f0addd..4252a9d0d5 100644 --- a/spec/bundler/commands/lock_spec.rb +++ b/spec/bundler/commands/lock_spec.rb @@ -1467,9 +1467,7 @@ RSpec.describe "bundle lock" do #{Bundler::VERSION} L - bundle "lock", raise_on_error: false - - expect(err).to eq <<~ERR.strip + expected_error = <<~ERR.strip Could not find compatible versions Because every version of activemodel depends on activesupport = 6.0.4 @@ -1493,28 +1491,13 @@ RSpec.describe "bundle lock" do version solving has failed. ERR - lockfile lockfile.gsub(/PLATFORMS\n #{local_platform}/m, "PLATFORMS\n #{lockfile_platforms("ruby")}") - bundle "lock", raise_on_error: false + expect(err).to eq(expected_error) - expect(err).to eq <<~ERR.strip - Could not find compatible versions + lockfile lockfile.gsub(/PLATFORMS\n #{local_platform}/m, "PLATFORMS\n #{lockfile_platforms("ruby")}") - Because rails >= 7.0.3.1, < 7.0.4 depends on activemodel = 7.0.3.1 - and rails >= 7.0.2.3, < 7.0.3.1 depends on activemodel = 7.0.2.3, - rails >= 7.0.2.3, < 7.0.4 requires activemodel = 7.0.2.3 OR = 7.0.3.1. - And because every version of activemodel depends on activesupport = 6.0.4, - rails >= 7.0.2.3, < 7.0.4 requires activesupport = 6.0.4. - Because rails >= 7.0.3.1, < 7.0.4 depends on activesupport = 7.0.3.1 - and rails >= 7.0.2.3, < 7.0.3.1 depends on activesupport = 7.0.2.3, - rails >= 7.0.2.3, < 7.0.4 requires activesupport = 7.0.2.3 OR = 7.0.3.1. - Thus, rails >= 7.0.2.3, < 7.0.4 cannot be used. - And because rails >= 7.0.4 depends on activemodel = 7.0.4, - rails >= 7.0.2.3 requires activemodel = 7.0.4. - So, because activemodel = 7.0.4 could not be found in rubygems repository https://gem.repo4/ or installed locally - and Gemfile depends on rails >= 7.0.2.3, - version solving has failed. - ERR + bundle "lock", raise_on_error: false + expect(err).to eq(expected_error) end it "does not accidentally resolves to prereleases" do |
