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