From 0b9e51c4294ff938ef8c244f2ca502ec6c230a63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Tue, 7 Mar 2023 18:05:41 +0100 Subject: [PATCH] =?UTF-8?q?Don=C2=B4t=20consider=20platform=20specific=20c?= =?UTF-8?q?andidates=20when=20`force=5Fruby=5Fplatform`=20set?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was working fine for direct dependencies using `force_ruby_platform` explicitly through Gemfile, but not for indirect dependencies. In general, indirect dependencies do not have this property set, but in truffleruby this is different and the default value is to have it set. --- lib/bundler/resolver.rb | 2 +- spec/bundler/commands/lock_spec.rb | 48 ++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index adc379e1e3..c8cc88a3ee 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -240,7 +240,7 @@ module Bundler ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY) groups << Resolver::Candidate.new(version, :specs => ruby_specs) if ruby_specs.any? - next groups if platform_specs == ruby_specs + next groups if platform_specs == ruby_specs || package.force_ruby_platform? groups << Resolver::Candidate.new(version, :specs => platform_specs) diff --git a/spec/bundler/commands/lock_spec.rb b/spec/bundler/commands/lock_spec.rb index 59a74b3083..f0c3537d2f 100644 --- a/spec/bundler/commands/lock_spec.rb +++ b/spec/bundler/commands/lock_spec.rb @@ -1075,4 +1075,52 @@ RSpec.describe "bundle lock" do expect(lockfile).not_to include("tzinfo-data (1.2022.7)") end end + + context "when resolving platform specific gems as indirect dependencies on truffleruby", :truffleruby_only do + before do + build_lib "foo", :path => bundled_app do |s| + s.add_dependency "nokogiri" + end + + build_repo4 do + build_gem "nokogiri", "1.14.2" + build_gem "nokogiri", "1.14.2" do |s| + s.platform = "x86_64-linux" + end + end + + gemfile <<-G + source "#{file_uri_for(gem_repo4)}" + gemspec + G + end + + it "locks ruby specs" do + simulate_platform "x86_64-linux" do + bundle "lock" + end + + expect(lockfile).to eq <<~L + PATH + remote: . + specs: + foo (1.0) + nokogiri + + GEM + remote: #{file_uri_for(gem_repo4)}/ + specs: + nokogiri (1.14.2) + + PLATFORMS + x86_64-linux + + DEPENDENCIES + foo! + + BUNDLED WITH + #{Bundler::VERSION} + L + end + end end