From c2f8e918150d9df17f66ac03713499f3a24912bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Thu, 13 Jun 2024 13:25:16 +0200 Subject: [PATCH] [rubygems/rubygems] Also disambiguate gems not in the first Gem.path position https://github.com/rubygems/rubygems/commit/7e6e7ccc58 --- lib/rubygems/basic_specification.rb | 7 +++++++ lib/rubygems/specification.rb | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb index 0bb139f861..0eee52492f 100644 --- a/lib/rubygems/basic_specification.rb +++ b/lib/rubygems/basic_specification.rb @@ -105,6 +105,13 @@ class Gem::BasicSpecification default_gem? ? 1 : -1 end + ## + # Gems higher up in +gem_path+ take precedence + + def base_dir_priority(gem_path) + gem_path.index(base_dir) || gem_path.size + end + ## # Returns full path to the directory where gem's extensions are installed. diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 99d2a96def..e50f833852 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -771,6 +771,11 @@ class Gem::Specification < Gem::BasicSpecification end private_class_method :clear_load_cache + def self.gem_path # :nodoc: + Gem.path + end + private_class_method :gem_path + def self.each_gemspec(dirs) # :nodoc: dirs.each do |dir| Gem::Util.glob_files_in_dir("*.gemspec", dir).each do |path| @@ -834,7 +839,7 @@ class Gem::Specification < Gem::BasicSpecification next platforms if platforms.nonzero? default_gem = a.default_gem_priority <=> b.default_gem_priority next default_gem if default_gem.nonzero? - b.base_dir == Gem.path.first ? 1 : -1 + a.base_dir_priority(gem_path) <=> b.base_dir_priority(gem_path) end end @@ -910,7 +915,7 @@ class Gem::Specification < Gem::BasicSpecification # Return the directories that Specification uses to find specs. def self.dirs - @@dirs ||= Gem::SpecificationRecord.dirs_from(Gem.path) + @@dirs ||= Gem::SpecificationRecord.dirs_from(gem_path) end ##