Skip to content

Commit 547ee1e

Browse files
committed
fix needing to sync lockfiles when an explicit dep becomes implicit
1 parent fa8c301 commit 547ee1e

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

lib/bundler/multilock.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ def after_install_all(install: true)
168168
up_to_date = false
169169
Bundler.settings.temporary(frozen: true) do
170170
Bundler.ui.silence do
171-
up_to_date = checker.base_check(lockfile_definition) &&
171+
up_to_date = checker.base_check(lockfile_definition, check_missing_deps: true) &&
172172
checker.check(lockfile_definition)
173173
end
174174
end

lib/bundler/multilock/check.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def run(skip_base_checks: false)
5858

5959
# this is mostly equivalent to the built in checks in `bundle check`, but even
6060
# more conservative, and returns false instead of exiting on failure
61-
def base_check(lockfile_definition, log_missing: false, return_missing: false)
61+
def base_check(lockfile_definition, log_missing: false, return_missing: false, check_missing_deps: false)
6262
return return_missing ? [] : false unless lockfile_definition[:lockfile].file?
6363

6464
Multilock.prepare_block = lockfile_definition[:prepare]
@@ -83,7 +83,10 @@ def base_check(lockfile_definition, log_missing: false, return_missing: false)
8383

8484
return not_installed if return_missing
8585

86-
not_installed.empty? && definition.no_resolve_needed?
86+
return false unless not_installed.empty? && definition.no_resolve_needed?
87+
return true unless check_missing_deps
88+
89+
(definition.locked_gems.dependencies.values - definition.dependencies).empty?
8790
ensure
8891
Multilock.prepare_block = nil
8992
end

spec/bundler/multilock_spec.rb

+20
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,26 @@
716716
end
717717
end
718718

719+
it "removes now-missing explicit dependencies from secondary lockfiles" do
720+
with_gemfile(<<~RUBY) do
721+
gem "inst-jobs", "3.1.13"
722+
gem "activerecord-pg-extensions"
723+
724+
lockfile("alt") {}
725+
RUBY
726+
invoke_bundler("install")
727+
728+
write_gemfile(<<~RUBY)
729+
gem "inst-jobs", "3.1.13"
730+
731+
lockfile("alt") {}
732+
RUBY
733+
734+
invoke_bundler("install")
735+
expect(File.read("Gemfile.lock")).to eq File.read("Gemfile.alt.lock")
736+
end
737+
end
738+
719739
private
720740

721741
def create_local_gem(name, content = "", subdirectory: true)

0 commit comments

Comments
 (0)