[rubygems/rubygems] Fix default gem priority when sorting specs

https://github.com/rubygems/rubygems/commit/8dbe1dbdc7

Co-authored-by: MSP-Greg <Greg.mpls@gmail.com>
This commit is contained in:
David Rodríguez 2024-06-13 13:21:53 +02:00 коммит произвёл git
Родитель 8b843b0dc7
Коммит 5c573b7652
3 изменённых файлов: 25 добавлений и 0 удалений

Просмотреть файл

@ -98,6 +98,13 @@ class Gem::BasicSpecification
File.dirname(loaded_from) == Gem.default_specifications_dir
end
##
# Regular gems take precedence over default gems
def default_gem_priority
default_gem? ? 1 : -1
end
##
# Returns full path to the directory where gem's extensions are installed.

Просмотреть файл

@ -832,6 +832,8 @@ class Gem::Specification < Gem::BasicSpecification
next versions if versions.nonzero?
platforms = Gem::Platform.sort_priority(b.platform) <=> Gem::Platform.sort_priority(a.platform)
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
end
end

Просмотреть файл

@ -489,6 +489,22 @@ class TestGemRequire < Gem::TestCase
assert_equal %w[default-3.0], loaded_spec_names
end
def test_default_gem_and_normal_gem_same_version
default_gem_spec = new_default_spec("default", "3.0",
nil, "default/gem.rb")
install_default_gems(default_gem_spec)
normal_gem_spec = util_spec("default", "3.0", nil,
"lib/default/gem.rb")
install_specs(normal_gem_spec)
# Load default ruby gems fresh as if we've just started a ruby script.
Gem::Specification.reset
assert_require "default/gem"
assert_equal %w[default-3.0], loaded_spec_names
refute Gem.loaded_specs["default"].default_gem?
end
def test_normal_gem_does_not_shadow_default_gem
default_gem_spec = new_default_spec("foo", "2.0", nil, "foo.rb")
install_default_gems(default_gem_spec)