From 83f929316e2ef860469886d8001b69a67f15a406 Mon Sep 17 00:00:00 2001 From: Samuel Giddins Date: Sat, 2 Sep 2023 15:53:27 -0500 Subject: [PATCH] [rubygems/rubygems] Fix force_ruby_platform: when the lockfile only locks the ruby platform https://github.com/rubygems/rubygems/commit/7c50064c3c --- lib/bundler/spec_set.rb | 1 + .../gemfile/force_ruby_platform_spec.rb | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/lib/bundler/spec_set.rb b/lib/bundler/spec_set.rb index 21630e3a3e..c69392d612 100644 --- a/lib/bundler/spec_set.rb +++ b/lib/bundler/spec_set.rb @@ -202,6 +202,7 @@ module Bundler specs_for_name = lookup[dep.name] target_platform = dep.force_ruby_platform ? Gem::Platform::RUBY : (platform || Bundler.local_platform) matching_specs = GemHelpers.select_best_platform_match(specs_for_name, target_platform) + matching_specs.each {|s| s.force_ruby_platform = true } if dep.force_ruby_platform matching_specs.map!(&:materialize_for_installation).compact! if platform.nil? matching_specs end diff --git a/spec/bundler/install/gemfile/force_ruby_platform_spec.rb b/spec/bundler/install/gemfile/force_ruby_platform_spec.rb index 0e9f1f0292..208a629101 100644 --- a/spec/bundler/install/gemfile/force_ruby_platform_spec.rb +++ b/spec/bundler/install/gemfile/force_ruby_platform_spec.rb @@ -114,5 +114,48 @@ RSpec.describe "bundle install with force_ruby_platform DSL option", :jruby do expect(the_bundle).to include_gems "depends_on_platform_specific 1.0.0 RUBY" expect(the_bundle).to include_gems "platform_specific 1.0.0 #{Bundler.local_platform}" end + + it "uses ruby variants for the explicit transitive dependency with a lockile that has only ruby platform" do + lockfile <<-L + GEM + remote: #{file_uri_for(gem_repo4)} + specs: + dep_level_2 (1.0) + depends_on_platform_specific + depends_on_platform_specific (1.0) + platform_specific + platform_specific (1.0) + + PLATFORMS + ruby + + DEPENDENCIES + dep_level_2 + platform_specific + + BUNDLED WITH + #{Bundler::VERSION} + L + + install_gemfile <<-G, :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s }, :artifice => "compact_index", :verbose => true + source "#{file_uri_for(gem_repo4)}" + + gem "platform_specific" + gem "depends_on_platform_specific" + G + + expect(the_bundle).to include_gems "depends_on_platform_specific 1.0.0 #{Bundler.local_platform}" + expect(the_bundle).to include_gems "platform_specific 1.0.0 #{Bundler.local_platform}" + + install_gemfile <<-G, :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s }, :artifice => "compact_index" + source "#{file_uri_for(gem_repo4)}" + + gem "platform_specific", :force_ruby_platform => true + gem "depends_on_platform_specific" + G + + expect(the_bundle).to include_gems "depends_on_platform_specific 1.0.0 #{Bundler.local_platform}" + expect(the_bundle).to include_gems "platform_specific 1.0.0 RUBY" + end end end