summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rodríguez <deivid.rodriguez@riseup.net>2024-09-26 11:22:19 +0200
committergit <svn-admin@ruby-lang.org>2024-09-30 05:07:57 +0000
commitd4ac5c573b3b57dc4e62b684be297269defceba2 (patch)
tree406f2521573f340130e2322fecef382b7ac37c4f
parent73d60df6e015d20b418d6307965251cbaec18e68 (diff)
[rubygems/rubygems] Don't add duplicated specs to unresolved specs
This could happen when a regular gem shadows a default gem. https://github.com/rubygems/rubygems/commit/9ef70dd1f7
-rw-r--r--lib/rubygems/specification.rb2
-rw-r--r--test/rubygems/test_require.rb16
2 files changed, 17 insertions, 1 deletions
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
index d05df9cf04..e5541e57b1 100644
--- a/lib/rubygems/specification.rb
+++ b/lib/rubygems/specification.rb
@@ -1412,7 +1412,7 @@ class Gem::Specification < Gem::BasicSpecification
end
begin
- specs = spec_dep.to_specs
+ specs = spec_dep.to_specs.uniq(&:full_name)
rescue Gem::MissingSpecError => e
raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}")
end
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
index b915a86197..48d66736fd 100644
--- a/test/rubygems/test_require.rb
+++ b/test/rubygems/test_require.rb
@@ -182,6 +182,22 @@ class TestGemRequire < Gem::TestCase
assert_equal %w[a-1 b-1], loaded_spec_names
end
+ def test_require_is_not_lazy_with_shadowed_default_gem
+ b1_default = new_default_spec("b", "1", nil, "foo.rb")
+ install_default_gems b1_default
+
+ a1 = util_spec "a", "1", { "b" => ">= 1" }, "lib/test_gem_require_a.rb"
+ b1 = util_spec("b", "1", nil, "lib/foo.rb")
+ install_specs b1, a1
+
+ # Load default ruby gems fresh as if we've just started a ruby script.
+ Gem::Specification.reset
+
+ assert_require "test_gem_require_a"
+ assert_equal %w[a-1 b-1], loaded_spec_names
+ assert_equal unresolved_names, []
+ end
+
def test_require_is_lazy_with_inexact_req
a1 = util_spec "a", "1", { "b" => ">= 1" }, "lib/test_gem_require_a.rb"
b1 = util_spec "b", "1", nil, "lib/b/c.rb"