[rubygems/rubygems] Fix lockfile platforms inconveniently added on JRuby

When working with our repository on JRuby locally, I get the following
changes when running `bin/rake setup` in all of our lockfiles

```diff
diff --git a/tool/bundler/dev_gems.rb.lock b/tool/bundler/dev_gems.rb.lock
index https://github.com/rubygems/rubygems/commit/362bf25690d..https://github.com/rubygems/rubygems/commit/74550b2a408 100644
--- a/tool/bundler/dev_gems.rb.lock
+++ b/tool/bundler/dev_gems.rb.lock
@@ -66,6 +66,7 @@ PLATFORMS
   java
   ruby
   universal-java
+  universal-java-22
   x64-mingw-ucrt
   x86-linux
   x86_64-darwin
```

This is inconvenient, so I applied the same strategy we already use on
non JRuby implementations to not add the current platform to the
lockfile if a less specific platform is already there.

https://github.com/rubygems/rubygems/commit/812b9cd1e8
This commit is contained in:
David Rodríguez 2025-02-14 16:33:44 +01:00 committed by Hiroshi SHIBATA
parent 8619520570
commit 63600d79dc

View File

@ -490,7 +490,7 @@ module Bundler
end end
def validate_platforms! def validate_platforms!
return if current_platform_locked? return if current_platform_locked? || @platforms.include?(Gem::Platform::RUBY)
raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \ raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
"but your local platform is #{local_platform}. " \ "but your local platform is #{local_platform}. " \
@ -731,7 +731,7 @@ module Bundler
end end
def start_resolution def start_resolution
local_platform_needed_for_resolvability = @most_specific_non_local_locked_ruby_platform && !@platforms.include?(local_platform) local_platform_needed_for_resolvability = @most_specific_non_local_locked_platform && !@platforms.include?(local_platform)
@platforms << local_platform if local_platform_needed_for_resolvability @platforms << local_platform if local_platform_needed_for_resolvability
add_platform(Gem::Platform::RUBY) if RUBY_ENGINE == "truffleruby" add_platform(Gem::Platform::RUBY) if RUBY_ENGINE == "truffleruby"
@ -739,9 +739,9 @@ module Bundler
@resolved_bundler_version = result.find {|spec| spec.name == "bundler" }&.version @resolved_bundler_version = result.find {|spec| spec.name == "bundler" }&.version
if @most_specific_non_local_locked_ruby_platform if @most_specific_non_local_locked_platform
if spec_set_incomplete_for_platform?(result, @most_specific_non_local_locked_ruby_platform) if spec_set_incomplete_for_platform?(result, @most_specific_non_local_locked_platform)
@platforms.delete(@most_specific_non_local_locked_ruby_platform) @platforms.delete(@most_specific_non_local_locked_platform)
elsif local_platform_needed_for_resolvability elsif local_platform_needed_for_resolvability
@platforms.delete(local_platform) @platforms.delete(local_platform)
end end
@ -758,23 +758,23 @@ module Bundler
def current_platform_locked? def current_platform_locked?
@platforms.any? do |bundle_platform| @platforms.any? do |bundle_platform|
MatchPlatform.platforms_match?(bundle_platform, local_platform) generic_local_platform == bundle_platform || local_platform === bundle_platform
end end
end end
def add_current_platform def add_current_platform
return if @platforms.include?(local_platform) return if @platforms.include?(local_platform)
@most_specific_non_local_locked_ruby_platform = find_most_specific_locked_ruby_platform @most_specific_non_local_locked_platform = find_most_specific_locked_platform
return if @most_specific_non_local_locked_ruby_platform return if @most_specific_non_local_locked_platform
@new_platforms << local_platform @new_platforms << local_platform
@platforms << local_platform @platforms << local_platform
true true
end end
def find_most_specific_locked_ruby_platform def find_most_specific_locked_platform
return unless generic_local_platform_is_ruby? && current_platform_locked? return unless current_platform_locked?
@most_specific_locked_platform @most_specific_locked_platform
end end