From 407577169716282ba14593a635bf33b2839bb13b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Wed, 28 Sep 2022 10:57:54 +0200 Subject: [PATCH] Refactor platform matching on Linux I think this highlights better how musl is special. --- bundler/lib/bundler/rubygems_ext.rb | 13 ++++++++++++- lib/rubygems/platform.rb | 11 ++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bundler/lib/bundler/rubygems_ext.rb b/bundler/lib/bundler/rubygems_ext.rb index 8b46d7ece4f1..201d2fef1751 100644 --- a/bundler/lib/bundler/rubygems_ext.rb +++ b/bundler/lib/bundler/rubygems_ext.rb @@ -261,10 +261,21 @@ def ===(other) # version ( (@os != "linux" && (@version.nil? || other.version.nil?)) || - (@os == "linux" && (other.version == "gnu#{@version}" || other.version == "musl#{@version}" || @version == "gnu#{other.version}")) || + (@os == "linux" && (normalized_linux_version_ext == other.normalized_linux_version_ext || other.version == "musl#{@version}")) || @version == other.version ) end + + # This is a copy of RubyGems 3.3.23 or higher `normalized_linux_method`. + # Once only 3.3.23 is supported, we can use the method in RubyGems. + def normalized_linux_version_ext + return nil unless @version + + without_gnu = @version.sub(/\Agnu/, "") + return nil if without_gnu.empty? + + without_gnu + end end end diff --git a/lib/rubygems/platform.rb b/lib/rubygems/platform.rb index 1dacc596c47b..1144879f9c6d 100644 --- a/lib/rubygems/platform.rb +++ b/lib/rubygems/platform.rb @@ -181,11 +181,20 @@ def ===(other) # version ( (@os != "linux" && (@version.nil? || other.version.nil?)) || - (@os == "linux" && (other.version == "gnu#{@version}" || other.version == "musl#{@version}" || @version == "gnu#{other.version}")) || + (@os == "linux" && (normalized_linux_version == other.normalized_linux_version || other.version == "musl#{@version}")) || @version == other.version ) end + def normalized_linux_version + return nil unless @version + + without_gnu = @version.sub(/\Agnu/, "") + return nil if without_gnu.empty? + + without_gnu + end + ## # Does +other+ match this platform? If +other+ is a String it will be # converted to a Gem::Platform first. See #=== for matching rules.