summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2024-01-19 13:32:45 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2024-01-22 09:57:10 +0900
commitd51f4c9288a2195fbf6889fca8790587f71a1cd9 (patch)
tree16b50f108499e411e50f71330fb749790e3f2e1f
parent94af1e5b811f13f9c1b9be6ab6a9eea192a713f8 (diff)
Reapply "[rubygems/rubygems] Fix `require` of a default gem when unresolved gems depend on it"
This reverts commit 54552b89e73fc616ba47c1c87d33625af99cbce9.
-rw-r--r--lib/rubygems/core_ext/kernel_require.rb2
-rw-r--r--test/rubygems/test_require.rb20
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
index 46954c534d..50e3ea89b4 100644
--- a/lib/rubygems/core_ext/kernel_require.rb
+++ b/lib/rubygems/core_ext/kernel_require.rb
@@ -62,6 +62,8 @@ module Kernel
Kernel.send(:gem, spec.name, Gem::Requirement.default_prerelease) unless
resolved_path
+
+ next
end
# If there are no unresolved deps, then we can use just try
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
index b3926afe15..7f5584ea8a 100644
--- a/test/rubygems/test_require.rb
+++ b/test/rubygems/test_require.rb
@@ -540,6 +540,26 @@ class TestGemRequire < Gem::TestCase
assert_equal %w[default-3.0.0.rc2], loaded_spec_names
end
+ def test_default_gem_with_unresolved_gems_depending_on_it
+ net_http_old = util_spec "net-http", "0.1.1", nil, "lib/net/http.rb"
+ install_gem net_http_old
+
+ net_http_default = new_default_spec "net-http", "0.3.0", nil, "net/http.rb"
+ install_default_gems net_http_default
+
+ faraday_1 = util_spec "faraday", "1", { "net-http" => ">= 0" }
+ install_gem faraday_1
+
+ faraday_2 = util_spec "faraday", "2", { "net-http" => ">= 0" }
+ install_gem faraday_2
+
+ chef = util_spec "chef", "1", { "faraday" => [">= 1", "< 3"] }, "lib/chef.rb"
+ install_gem chef
+
+ assert_require "chef"
+ assert_require "net/http"
+ end
+
def loaded_spec_names
Gem.loaded_specs.values.map(&:full_name).sort
end