Skip to content

Commit

Permalink
Fix issue with bundle update with an out of sync lockfile
Browse files Browse the repository at this point in the history
An old platform related bug fix made some existing lockfiles no longer
work because they included invalid platforms. So to make it backwards
compatible, code was added to remove invalid platforms from the lockfile
before resolution. This is skipped though when Gemfile has changed
dependencies because in that case we will be re-resolving anyways.
However, in the `bundle update` case, the detection of "dependencies
have changed" was not actually working making Bundler remove all
platforms and not be able to resolve.
  • Loading branch information
deivid-rodriguez committed Apr 25, 2024
1 parent a9917d8 commit 6452adf
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 4 deletions.
8 changes: 4 additions & 4 deletions bundler/lib/bundler/definition.rb
Expand Up @@ -92,11 +92,12 @@ def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil, opti
@platforms = @locked_platforms.dup
@locked_bundler_version = @locked_gems.bundler_version
@locked_ruby_version = @locked_gems.ruby_version
@originally_locked_deps = @locked_gems.dependencies
@originally_locked_specs = SpecSet.new(@locked_gems.specs)
@locked_checksums = @locked_gems.checksums

if unlock != true
@locked_deps = @locked_gems.dependencies
@locked_deps = @originally_locked_deps
@locked_specs = @originally_locked_specs
@locked_sources = @locked_gems.sources
else
Expand All @@ -111,6 +112,7 @@ def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil, opti
@locked_gems = nil
@locked_deps = {}
@locked_specs = SpecSet.new([])
@originally_locked_deps = {}
@originally_locked_specs = @locked_specs
@locked_sources = []
@locked_platforms = []
Expand Down Expand Up @@ -835,9 +837,7 @@ def converge_dependencies
dep.source = sources.get(dep.source)
end

next if unlocking?

unless locked_dep = @locked_deps[dep.name]
unless locked_dep = @originally_locked_deps[dep.name]
changes = true
next
end
Expand Down
46 changes: 46 additions & 0 deletions bundler/spec/commands/update_spec.rb
Expand Up @@ -1954,6 +1954,52 @@
end
end

context "when Gemfile dependencies have changed" do
before do
build_repo4 do
build_gem "nokogiri", "1.16.4" do |s|
s.platform = "arm64-darwin"
end

build_gem "nokogiri", "1.16.4" do |s|
s.platform = "x86_64-linux"
end

build_gem "prism", "0.25.0"
end

gemfile <<~G
source "#{file_uri_for(gem_repo4)}"
gem "nokogiri", ">=1.16.4"
gem "prism", ">=0.25.0"
G

lockfile <<~L
GEM
remote: #{file_uri_for(gem_repo4)}/
specs:
nokogiri (1.16.4-arm64-darwin)
nokogiri (1.16.4-x86_64-linux)
PLATFORMS
arm64-darwin
x86_64-linux
DEPENDENCIES
nokogiri (>= 1.16.4)
BUNDLED WITH
#{Bundler::VERSION}
L
end

it "still works" do
simulate_platform "arm64-darwin-23" do
bundle "update"
end
end
end

context "error handling" do
before do
gemfile "source \"#{file_uri_for(gem_repo1)}\""
Expand Down

0 comments on commit 6452adf

Please sign in to comment.