diff options
| author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2024-06-13 13:21:53 +0200 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-06-13 14:25:14 +0000 |
| commit | 5c573b7652ec88995ba2a6172a10f6d98e4b2dcd (patch) | |
| tree | fd6ee859a1ea16ddc3f9261ac38375c34cfb5c88 | |
| parent | 8b843b0dc775a2a91d5aa1fbef75dac3a9cd589c (diff) | |
[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>
| -rw-r--r-- | lib/rubygems/basic_specification.rb | 7 | ||||
| -rw-r--r-- | lib/rubygems/specification.rb | 2 | ||||
| -rw-r--r-- | test/rubygems/test_require.rb | 16 |
3 files changed, 25 insertions, 0 deletions
diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb index f25756f92c..0bb139f861 100644 --- a/lib/rubygems/basic_specification.rb +++ b/lib/rubygems/basic_specification.rb @@ -99,6 +99,13 @@ class Gem::BasicSpecification 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. def extension_dir diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index da55a2e6d3..99d2a96def 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -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 diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb index 30a4a477f9..42a31452ae 100644 --- a/test/rubygems/test_require.rb +++ b/test/rubygems/test_require.rb @@ -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) |
