Skip to content

Commit c4a2f72

Browse files
deivid-rodriguezhsbt
authored andcommitted
[rubygems/rubygems] Fix bundle lock --normalize-platforms regression
ruby/rubygems@458fa5dc4c
1 parent 8ad5dd7 commit c4a2f72

File tree

3 files changed

+221
-4
lines changed

3 files changed

+221
-4
lines changed

lib/bundler/definition.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ def validate_platforms!
465465
end
466466

467467
def normalize_platforms
468-
@platforms = resolve.normalize_platforms!(current_dependencies, platforms)
468+
resolve.normalize_platforms!(current_dependencies, platforms)
469469

470470
@resolve = SpecSet.new(resolve.for(current_dependencies, @platforms))
471471
end

lib/bundler/spec_set.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ def for(dependencies, platforms_or_legacy_check = [nil], legacy_platforms = [nil
2929
end
3030

3131
def normalize_platforms!(deps, platforms)
32-
complete_platforms = add_extra_platforms!(platforms)
32+
add_extra_platforms!(platforms)
3333

34-
complete_platforms.map do |platform|
34+
platforms.map! do |platform|
3535
next platform if platform == Gem::Platform::RUBY
3636

3737
begin
@@ -44,7 +44,7 @@ def normalize_platforms!(deps, platforms)
4444
next platform if incomplete_for_platform?(deps, less_specific_platform)
4545

4646
less_specific_platform
47-
end.uniq
47+
end.uniq!
4848
end
4949

5050
def add_originally_invalid_platforms!(platforms, originally_invalid_platforms)
@@ -68,6 +68,7 @@ def add_extra_platforms!(platforms)
6868
return if new_platforms.empty?
6969

7070
platforms.concat(new_platforms)
71+
return if new_platforms.include?(Bundler.local_platform)
7172

7273
less_specific_platform = new_platforms.find {|platform| platform != Gem::Platform::RUBY && Bundler.local_platform === platform && platform === Bundler.local_platform }
7374
platforms.delete(Bundler.local_platform) if less_specific_platform

spec/bundler/commands/lock_spec.rb

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2361,4 +2361,220 @@
23612361
L
23622362
end
23632363
end
2364+
2365+
describe "--normalize-platforms on linux" do
2366+
let(:normalized_lockfile) do
2367+
<<~L
2368+
GEM
2369+
remote: https://gem.repo4/
2370+
specs:
2371+
irb (1.0.0)
2372+
irb (1.0.0-x86_64-linux)
2373+
2374+
PLATFORMS
2375+
ruby
2376+
x86_64-linux
2377+
2378+
DEPENDENCIES
2379+
irb
2380+
2381+
BUNDLED WITH
2382+
#{Bundler::VERSION}
2383+
L
2384+
end
2385+
2386+
before do
2387+
build_repo4 do
2388+
build_gem "irb", "1.0.0"
2389+
2390+
build_gem "irb", "1.0.0" do |s|
2391+
s.platform = "x86_64-linux"
2392+
end
2393+
end
2394+
2395+
gemfile <<~G
2396+
source "https://gem.repo4"
2397+
2398+
gem "irb"
2399+
G
2400+
end
2401+
2402+
context "when already normalized" do
2403+
before do
2404+
lockfile normalized_lockfile
2405+
end
2406+
2407+
it "is a noop" do
2408+
simulate_platform "x86_64-linux" do
2409+
bundle "lock --normalize-platforms"
2410+
end
2411+
2412+
expect(lockfile).to eq(normalized_lockfile)
2413+
end
2414+
end
2415+
2416+
context "when not already normalized" do
2417+
before do
2418+
lockfile <<~L
2419+
GEM
2420+
remote: https://gem.repo4/
2421+
specs:
2422+
irb (1.0.0)
2423+
2424+
PLATFORMS
2425+
ruby
2426+
2427+
DEPENDENCIES
2428+
irb
2429+
2430+
BUNDLED WITH
2431+
#{Bundler::VERSION}
2432+
L
2433+
end
2434+
2435+
it "normalizes the list of platforms and native gems in the lockfile" do
2436+
simulate_platform "x86_64-linux" do
2437+
bundle "lock --normalize-platforms"
2438+
end
2439+
2440+
expect(lockfile).to eq(normalized_lockfile)
2441+
end
2442+
end
2443+
end
2444+
2445+
describe "--normalize-platforms on darwin" do
2446+
let(:normalized_lockfile) do
2447+
<<~L
2448+
GEM
2449+
remote: https://gem.repo4/
2450+
specs:
2451+
irb (1.0.0)
2452+
irb (1.0.0-arm64-darwin)
2453+
2454+
PLATFORMS
2455+
arm64-darwin
2456+
ruby
2457+
2458+
DEPENDENCIES
2459+
irb
2460+
2461+
BUNDLED WITH
2462+
#{Bundler::VERSION}
2463+
L
2464+
end
2465+
2466+
before do
2467+
build_repo4 do
2468+
build_gem "irb", "1.0.0"
2469+
2470+
build_gem "irb", "1.0.0" do |s|
2471+
s.platform = "arm64-darwin"
2472+
end
2473+
end
2474+
2475+
gemfile <<~G
2476+
source "https://gem.repo4"
2477+
2478+
gem "irb"
2479+
G
2480+
end
2481+
2482+
context "when already normalized" do
2483+
before do
2484+
lockfile normalized_lockfile
2485+
end
2486+
2487+
it "is a noop" do
2488+
simulate_platform "arm64-darwin-23" do
2489+
bundle "lock --normalize-platforms"
2490+
end
2491+
2492+
expect(lockfile).to eq(normalized_lockfile)
2493+
end
2494+
end
2495+
2496+
context "when having only ruby" do
2497+
before do
2498+
lockfile <<~L
2499+
GEM
2500+
remote: https://gem.repo4/
2501+
specs:
2502+
irb (1.0.0)
2503+
2504+
PLATFORMS
2505+
ruby
2506+
2507+
DEPENDENCIES
2508+
irb
2509+
2510+
BUNDLED WITH
2511+
#{Bundler::VERSION}
2512+
L
2513+
end
2514+
2515+
it "normalizes the list of platforms and native gems in the lockfile" do
2516+
simulate_platform "arm64-darwin-23" do
2517+
bundle "lock --normalize-platforms"
2518+
end
2519+
2520+
expect(lockfile).to eq(normalized_lockfile)
2521+
end
2522+
end
2523+
2524+
context "when having only the current platform with version" do
2525+
before do
2526+
lockfile <<~L
2527+
GEM
2528+
remote: https://gem.repo4/
2529+
specs:
2530+
irb (1.0.0-arm64-darwin)
2531+
2532+
PLATFORMS
2533+
arm64-darwin-23
2534+
2535+
DEPENDENCIES
2536+
irb
2537+
2538+
BUNDLED WITH
2539+
#{Bundler::VERSION}
2540+
L
2541+
end
2542+
2543+
it "normalizes the list of platforms by removing version" do
2544+
simulate_platform "arm64-darwin-23" do
2545+
bundle "lock --normalize-platforms"
2546+
end
2547+
2548+
expect(lockfile).to eq(normalized_lockfile)
2549+
end
2550+
end
2551+
2552+
context "when having other platforms with version" do
2553+
before do
2554+
lockfile <<~L
2555+
GEM
2556+
remote: https://gem.repo4/
2557+
specs:
2558+
irb (1.0.0-arm64-darwin)
2559+
2560+
PLATFORMS
2561+
arm64-darwin-22
2562+
2563+
DEPENDENCIES
2564+
irb
2565+
2566+
BUNDLED WITH
2567+
#{Bundler::VERSION}
2568+
L
2569+
end
2570+
2571+
it "normalizes the list of platforms by removing version" do
2572+
simulate_platform "arm64-darwin-23" do
2573+
bundle "lock --normalize-platforms"
2574+
end
2575+
2576+
expect(lockfile).to eq(normalized_lockfile)
2577+
end
2578+
end
2579+
end
23642580
end

0 commit comments

Comments
 (0)