Skip to content

Commit 758e01d

Browse files
deivid-rodriguezhsbt
authored andcommitted
[rubygems/rubygems] Make sure to not re-resolve when a not fully specific local platform is locked
rubygems/rubygems@36a02c6128
1 parent c6a28b0 commit 758e01d

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

lib/bundler/definition.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,11 +621,13 @@ def materialize(dependencies)
621621
end
622622

623623
def start_resolution
624+
@platforms |= [local_platform]
625+
624626
result = SpecSet.new(resolver.start)
625627

626628
@resolved_bundler_version = result.find {|spec| spec.name == "bundler" }&.version
627629

628-
if @current_ruby_locked_platform && @current_ruby_locked_platform != local_platform
630+
if most_specific_ruby_locked_platform_is_not_local_platform?
629631
@platforms.delete(result.incomplete_for_platform?(dependencies, @current_ruby_locked_platform) ? @current_ruby_locked_platform : local_platform)
630632
end
631633

@@ -667,10 +669,15 @@ def current_platform_locked?
667669

668670
def add_current_platform
669671
@current_ruby_locked_platform = most_specific_locked_platform if current_ruby_platform_locked?
672+
return if most_specific_ruby_locked_platform_is_not_local_platform?
670673

671674
add_platform(local_platform)
672675
end
673676

677+
def most_specific_ruby_locked_platform_is_not_local_platform?
678+
@current_ruby_locked_platform && @current_ruby_locked_platform != local_platform
679+
end
680+
674681
def change_reason
675682
if unlocking?
676683
unlock_targets = if @gems_to_unlock.any?

spec/bundler/install/gemfile/specific_platform_spec.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1434,6 +1434,40 @@
14341434
end
14351435
end
14361436

1437+
it "does not re-resolve when a specific platform, but less specific than the current platform, is locked" do
1438+
build_repo4 do
1439+
build_gem "nokogiri"
1440+
end
1441+
1442+
gemfile <<~G
1443+
source "#{file_uri_for(gem_repo4)}"
1444+
1445+
gem "nokogiri"
1446+
G
1447+
1448+
lockfile <<~L
1449+
GEM
1450+
remote: #{file_uri_for(gem_repo4)}/
1451+
specs:
1452+
nokogiri (1.0)
1453+
1454+
PLATFORMS
1455+
arm64-darwin
1456+
1457+
DEPENDENCIES
1458+
nokogiri!
1459+
1460+
BUNDLED WITH
1461+
#{Bundler::VERSION}
1462+
L
1463+
1464+
simulate_platform "arm64-darwin-23" do
1465+
bundle "install --verbose"
1466+
1467+
expect(out).to include("Found no changes, using resolution from the lockfile")
1468+
end
1469+
end
1470+
14371471
private
14381472

14391473
def setup_multiplatform_gem

0 commit comments

Comments
 (0)