summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/bundler/definition.rb18
-rw-r--r--spec/bundler/install/gemfile/override_spec.rb8
2 files changed, 11 insertions, 15 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index 2fe28f7656..2aa74804ba 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -1061,11 +1061,10 @@ module Bundler
def converge_overrides_outside_dependencies
@overrides.each do |override|
- if override.target == :all
- unlock_all_locked_specs_for_override
- next
- end
-
+ # :all overrides are intentionally not pre-unlocked. They take effect on
+ # fresh resolution (no lockfile) or when the user runs `bundle update`.
+ # Forcing a full re-resolve from a single :all directive would surprise
+ # users with unrelated dependency churn.
next unless override.target.is_a?(String)
name = override.target
@@ -1081,15 +1080,6 @@ module Bundler
end
end
- def unlock_all_locked_specs_for_override
- @originally_locked_specs.each do |locked_spec|
- name = locked_spec.name
- next if @changed_dependencies.include?(name)
- @gems_to_unlock << name
- @changed_dependencies << name
- end
- end
-
# Remove elements from the locked specs that are expired. This will most
# commonly happen if the Gemfile has changed since the lockfile was last
# generated
diff --git a/spec/bundler/install/gemfile/override_spec.rb b/spec/bundler/install/gemfile/override_spec.rb
index 19fa2ee915..02b0e7d772 100644
--- a/spec/bundler/install/gemfile/override_spec.rb
+++ b/spec/bundler/install/gemfile/override_spec.rb
@@ -291,7 +291,7 @@ RSpec.describe "override DSL" do
expect(err).to include("still_blocked")
end
- it "re-resolves a previously locked spec when an :all metadata override is added" do
+ it "preserves locked versions when an :all metadata override is added without bundle update" do
build_repo2 do
build_gem "selectable", "1.0"
build_gem "selectable", "2.0" do |s|
@@ -313,7 +313,13 @@ RSpec.describe "override DSL" do
gem "selectable"
G
+ # :all override alone does not pre-unlock locked specs; narrow change
+ # should not trigger unrelated lockfile churn.
bundle :lock
+ expect(lockfile).to include("selectable (1.0)")
+
+ # bundle update opts the user into re-resolution under the override.
+ bundle "update selectable"
expect(lockfile).to include("selectable (2.0)")
end
end