summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <[email protected]>2024-01-19 11:53:45 +0900
committerHiroshi SHIBATA <[email protected]>2024-01-19 11:54:17 +0900
commit04cf66765a8a9d48baea6d9aee266dc9aa21df27 (patch)
tree1df3217ac15249fd5bbec2d374a0badcff9a741a
parent7265a5be01c269dcc54550ca8cd8ba1ce780f9ef (diff)
Revert "[rubygems/rubygems] Fix activation conflicts when circularly requiring a gem"
This reverts commit db44088c2a92040879386aa5f268db4c858e4e5b. https://github.com/ruby/ruby/actions/runs/7578672002/job/20641640821 https://github.com/ruby/ruby/actions/runs/7578672002/job/20641641212 https://github.com/ruby/ruby/actions/runs/7578672002/job/20641642031
-rw-r--r--lib/rubygems.rb7
-rw-r--r--lib/rubygems/core_ext/kernel_require.rb8
-rw-r--r--test/rubygems/test_require.rb39
3 files changed, 2 insertions, 52 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index ad7ab10756..47b1ce69d2 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -1216,13 +1216,6 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
##
# Find a Gem::Specification of default gem from +path+
- def find_default_spec(path)
- @path_to_default_spec_map[path]
- end
-
- ##
- # Find an unresolved Gem::Specification of default gem from +path+
-
def find_unresolved_default_spec(path)
default_spec = @path_to_default_spec_map[path]
default_spec if default_spec && loaded_specs[default_spec.name] != default_spec
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
index 073966b696..50e3ea89b4 100644
--- a/lib/rubygems/core_ext/kernel_require.rb
+++ b/lib/rubygems/core_ext/kernel_require.rb
@@ -42,11 +42,7 @@ module Kernel
# If +path+ belongs to a default gem, we activate it and then go straight
# to normal require
- if spec = Gem.find_default_spec(path)
- name = spec.name
-
- next if Gem.loaded_specs[name]
-
+ if spec = Gem.find_unresolved_default_spec(path)
# Ensure -I beats a default gem
resolved_path = begin
rp = nil
@@ -64,7 +60,7 @@ module Kernel
rp
end
- Kernel.send(:gem, name, Gem::Requirement.default_prerelease) unless
+ Kernel.send(:gem, spec.name, Gem::Requirement.default_prerelease) unless
resolved_path
next
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
index f595d8e08e..7f5584ea8a 100644
--- a/test/rubygems/test_require.rb
+++ b/test/rubygems/test_require.rb
@@ -560,45 +560,6 @@ class TestGemRequire < Gem::TestCase
assert_require "net/http"
end
- def test_default_gem_required_circulary_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"
- net_http_default_path = File.join(@tempdir, "default_gems", "lib", "net/http.rb")
- install_default_gems net_http_default
- File.write(net_http_default_path, 'require "net/http"')
-
- 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"
-
- out, err = capture_output do
- assert_require "net/http"
- end
-
- assert_empty out
-
- circular_require_warning = false
-
- err_lines = err.split("\n").reject do |line|
- if line.include?("circular require")
- circular_require_warning = true
- elsif circular_require_warning # ignore backtrace lines for circular require warning
- circular_require_warning = line.start_with?(/[\s]/)
- end
- end
-
- assert_empty err_lines
- end
-
def loaded_spec_names
Gem.loaded_specs.values.map(&:full_name).sort
end