diff options
author | Mike Dalessio <mike.dalessio@gmail.com> | 2024-04-15 13:17:54 -0400 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2024-04-17 18:17:12 +0000 |
commit | 98c84ef42c61b84c1745bbc5a1ceff1ce00999d9 (patch) | |
tree | cbc733f1283ea8249750ce2fb4842db05f871860 /spec | |
parent | 814dedcee248667802b98ea1ba89cbeac171044f (diff) | |
download | ruby-98c84ef42c61b84c1745bbc5a1ceff1ce00999d9.tar.gz |
[rubygems/rubygems] Excluding local platform from lockfile should not affect musl vs gnu case
This case is for not locking things like `arm-darwin-23` when the
lockfile already includes `arm-darwin`, so that we don't infinitely keep
redundant versioned platforms in the lockfile when not necessary.
We detect this with `Gem::Platform#===`. For example,
`Gem::Platform.new("arm-darwin-23") === Gem::Platform.new("arm-darwin")`
but they're not `==`.
However, in the case of `-musl` vs `-gnu`, those act as the platform
"version", but `===` is not commutative for them. This is explained in
`===` docs.
We only want to exclude the local platform in situations when
`Gem::Platform#===` is actually commutative.
https://github.com/rubygems/rubygems/commit/8099c4face
Diffstat (limited to 'spec')
-rw-r--r-- | spec/bundler/install/gemfile/specific_platform_spec.rb | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/spec/bundler/install/gemfile/specific_platform_spec.rb b/spec/bundler/install/gemfile/specific_platform_spec.rb index c81c7095b0..5f1b034bfc 100644 --- a/spec/bundler/install/gemfile/specific_platform_spec.rb +++ b/spec/bundler/install/gemfile/specific_platform_spec.rb @@ -1262,43 +1262,47 @@ RSpec.describe "bundle install with specific platforms" do end end - it "adds current musl platform" do - build_repo4 do - build_gem "rcee_precompiled", "0.5.0" do |s| - s.platform = "x86_64-linux" - end + ["x86_64-linux", "x86_64-linux-musl"].each do |host_platform| + describe "on host platform #{host_platform}" do + it "adds current musl platform" do + build_repo4 do + build_gem "rcee_precompiled", "0.5.0" do |s| + s.platform = "x86_64-linux" + end + + build_gem "rcee_precompiled", "0.5.0" do |s| + s.platform = "x86_64-linux-musl" + end + end - build_gem "rcee_precompiled", "0.5.0" do |s| - s.platform = "x86_64-linux-musl" - end - end + gemfile <<~G + source "#{file_uri_for(gem_repo4)}" - gemfile <<~G - source "#{file_uri_for(gem_repo4)}" + gem "rcee_precompiled", "0.5.0" + G - gem "rcee_precompiled", "0.5.0" - G + simulate_platform host_platform do + bundle "lock", artifice: "compact_index", env: { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s } - simulate_platform "x86_64-linux-musl" do - bundle "lock", artifice: "compact_index", env: { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s } + expect(lockfile).to eq(<<~L) + GEM + remote: #{file_uri_for(gem_repo4)}/ + specs: + rcee_precompiled (0.5.0-x86_64-linux) + rcee_precompiled (0.5.0-x86_64-linux-musl) - expect(lockfile).to eq(<<~L) - GEM - remote: #{file_uri_for(gem_repo4)}/ - specs: - rcee_precompiled (0.5.0-x86_64-linux) - rcee_precompiled (0.5.0-x86_64-linux-musl) + PLATFORMS + x86_64-linux + x86_64-linux-musl - PLATFORMS - x86_64-linux - x86_64-linux-musl + DEPENDENCIES + rcee_precompiled (= 0.5.0) - DEPENDENCIES - rcee_precompiled (= 0.5.0) - - BUNDLED WITH - #{Bundler::VERSION} - L + BUNDLED WITH + #{Bundler::VERSION} + L + end + end end end |