summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuki Nishijima <yk.nishijima@gmail.com>2020-05-25 20:34:56 -0400
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2020-06-05 07:32:42 +0900
commit77ba8a1d610114cdaf59993dceeb3ebf6f624436 (patch)
tree3f4774fc513a9d575d0ef23adb45b85c58e56564
parent5bbddba20b25cb2ddb7fbc82c355fb2f25633f73 (diff)
[rubygems/rubygems] Use LoadError#path to figure out the argument passed to 'require'
https://github.com/rubygems/rubygems/commit/5995394ec4
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3184
-rw-r--r--lib/rubygems/core_ext/kernel_require.rb2
-rw-r--r--test/rubygems/test_require.rb27
2 files changed, 28 insertions, 1 deletions
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
index 115ae0cb50..faf9886d78 100644
--- a/lib/rubygems/core_ext/kernel_require.rb
+++ b/lib/rubygems/core_ext/kernel_require.rb
@@ -148,7 +148,7 @@ module Kernel
RUBYGEMS_ACTIVATION_MONITOR.enter
begin
- if load_error.message.end_with?(path) and Gem.try_activate(path)
+ if load_error.path == path and Gem.try_activate(path)
require_again = true
end
ensure
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
index 2b11e26dfe..d1767cb4a6 100644
--- a/test/rubygems/test_require.rb
+++ b/test/rubygems/test_require.rb
@@ -509,6 +509,33 @@ class TestGemRequire < Gem::TestCase
assert_equal %w[default-3.0], loaded_spec_names
end
+ def test_normal_gems_with_overridden_load_error_message
+ normal_gem_spec = util_spec("normal", "3.0", nil, "lib/normal/gem.rb")
+
+ install_specs(normal_gem_spec)
+
+ File.write("require_with_overridden_load_error_message.rb", <<-RUBY)
+ LoadError.class_eval do
+ def message
+ "Overridden message"
+ end
+ end
+
+ require 'normal/gem'
+ RUBY
+
+ require "open3"
+
+ output, exit_status = Open3.capture2e(
+ { "GEM_HOME" => Gem.paths.home },
+ *ruby_with_rubygems_in_load_path,
+ "-r",
+ "./require_with_overridden_load_error_message.rb"
+ )
+
+ assert exit_status.success?, "Require failed due to #{output}"
+ end
+
def test_default_gem_prerelease
default_gem_spec = new_default_spec("default", "2.0.0",
nil, "default/gem.rb")