diff options
-rw-r--r-- | lib/bundler/resolver.rb | 2 | ||||
-rw-r--r-- | spec/bundler/realworld/edgecases_spec.rb | 2 | ||||
-rw-r--r-- | spec/bundler/resolver/basic_spec.rb | 9 |
3 files changed, 11 insertions, 2 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 3263913b7f..3d9b0c5674 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -131,7 +131,7 @@ module Bundler if base_requirements[name] names_to_unlock << name - elsif package.ignores_prereleases? + elsif package.ignores_prereleases? && @all_specs[name].any? {|s| s.version.prerelease? } names_to_allow_prereleases_for << name end diff --git a/spec/bundler/realworld/edgecases_spec.rb b/spec/bundler/realworld/edgecases_spec.rb index 2f465b7b25..d04da0c334 100644 --- a/spec/bundler/realworld/edgecases_spec.rb +++ b/spec/bundler/realworld/edgecases_spec.rb @@ -323,7 +323,7 @@ RSpec.describe "real world edgecases", :realworld => true do if Bundler.feature_flag.bundler_3_mode? # Conflicts on bundler version, so we count attempts differently bundle :lock, :env => { "DEBUG_RESOLVER" => "1" }, :raise_on_error => false - expect(out.split("\n").grep(/backtracking to/).count).to eq(16) + expect(out.split("\n").grep(/backtracking to/).count).to eq(8) else bundle :lock, :env => { "DEBUG_RESOLVER" => "1" } expect(out).to include("Solution found after 7 attempts") diff --git a/spec/bundler/resolver/basic_spec.rb b/spec/bundler/resolver/basic_spec.rb index c07b77d6fd..4a0dd37bf9 100644 --- a/spec/bundler/resolver/basic_spec.rb +++ b/spec/bundler/resolver/basic_spec.rb @@ -107,6 +107,15 @@ RSpec.describe "Resolving" do end.to raise_error(Bundler::SolveFailure) end + it "does not try to re-resolve including prereleases if gems involved don't have prereleases" do + @index = a_unresolvable_child_index + dep "chef_app_error" + expect(Bundler.ui).not_to receive(:debug).with("Retrying resolution...", any_args) + expect do + resolve + end.to raise_error(Bundler::SolveFailure) + end + it "raises an exception with the minimal set of conflicting dependencies" do @index = build_index do %w[0.9 1.0 2.0].each {|v| gem("a", v) } |