summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rodríguez <deivid.rodriguez@riseup.net>2020-07-12 22:18:01 +0200
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2020-07-31 21:07:19 +0900
commit3921ab8291925f2d177535d38d2aaaa020f5d546 (patch)
treebe5d72847c4089f3f15b13f5352ed057bb36a74b
parentebf008b9aea71fdf9be8dcc92faae1c024201bf9 (diff)
[rubygems/rubygems] Let more exceptions flow
If any error happens while verifying a package entry, it doesn't mean that the package is corrupt. It could be a bug in rubygems, for example. This in fact happened in CI and the current error doesn't make it easy to troubleshoot the root cause, since it doesn't provide a backtrace. See https://github.com/rubygems/rubygems/pull/3807/checks?check_run_id=862526615. So I propose to let the exception happens. There was something useful about the previous message, which is the file entry where the error happened, so I'm keeping that information in a warning message. https://github.com/rubygems/rubygems/commit/ece87d858f
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3379
-rw-r--r--lib/rubygems/package.rb7
-rw-r--r--test/rubygems/test_gem_package.rb17
2 files changed, 17 insertions, 7 deletions
diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb
index 53ae696e97..9b53cd4a7b 100644
--- a/lib/rubygems/package.rb
+++ b/lib/rubygems/package.rb
@@ -669,10 +669,9 @@ EOM
when 'data.tar.gz' then
verify_gz entry
end
- rescue => e
- message = "package is corrupt, exception while verifying: " +
- "#{e.message} (#{e.class})"
- raise Gem::Package::FormatError.new message, @gem
+ rescue
+ warn "Exception while verifying #{@gem.path}"
+ raise
end
##
diff --git a/test/rubygems/test_gem_package.rb b/test/rubygems/test_gem_package.rb
index 1a9ca15e8d..5e9c3b7b81 100644
--- a/test/rubygems/test_gem_package.rb
+++ b/test/rubygems/test_gem_package.rb
@@ -1065,11 +1065,22 @@ class TestGemPackage < Gem::Package::TarTestCase
package = Gem::Package.new @gem
- e = assert_raises Gem::Package::FormatError do
- package.verify_entry entry
+ _, err = use_ui @ui do
+ e = nil
+
+ out_err = capture_io do
+ e = assert_raises ArgumentError do
+ package.verify_entry entry
+ end
+ end
+
+ assert_equal "whatever", e.message
+ assert_equal "full_name", e.backtrace_locations.first.label
+
+ out_err
end
- assert_equal "package is corrupt, exception while verifying: whatever (ArgumentError) in #{@gem}", e.message
+ assert_equal "Exception while verifying #{@gem}\n", err
valid_metadata = ["metadata", "metadata.gz"]
valid_metadata.each do |vm|