[rubygems/rubygems] Also disambiguate gems not in the first Gem.path position

https://github.com/rubygems/rubygems/commit/7e6e7ccc58
This commit is contained in:
David Rodríguez 2024-06-13 13:25:16 +02:00 committed by git
parent 5c573b7652
commit c2f8e91815
2 changed files with 14 additions and 2 deletions

View File

@ -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.

View File

@ -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
##