summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Niknam <[email protected]>2021-08-22 20:06:02 +1000
committerHiroshi SHIBATA <[email protected]>2021-08-31 19:06:14 +0900
commit589377fbdce9d281041535e3bf63f008689bb776 (patch)
tree7eb9671d26a73517834f2e42ab206462229c5c57
parenta508693f06aefe30d2d83c9617541722ba6c8d66 (diff)
[rubygems/rubygems] Refactor `Gem::RemoteFetcher::FetchError.build` back to its initialize method
https://github.com/rubygems/rubygems/commit/21dcdd2dc5
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4789
-rw-r--r--lib/rubygems/remote_fetcher.rb35
-rw-r--r--lib/rubygems/request.rb8
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb2
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb2
-rw-r--r--test/rubygems/test_gem_resolver_best_set.rb6
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb2
-rw-r--r--test/rubygems/test_remote_fetch_error.rb6
-rw-r--r--test/rubygems/utilities.rb4
8 files changed, 28 insertions, 37 deletions
diff --git a/lib/rubygems/remote_fetcher.rb b/lib/rubygems/remote_fetcher.rb
index 60c5da090f..ba1c1cb4e7 100644
--- a/lib/rubygems/remote_fetcher.rb
+++ b/lib/rubygems/remote_fetcher.rb
@@ -22,24 +22,15 @@ class Gem::RemoteFetcher
class FetchError < Gem::Exception
##
# The URI which was being accessed when the exception happened.
- def self.build(message, uri)
- original_uri = uri.dup
- uri = Gem::PrintableUri.parse_uri(uri)
-
- if uri.respond_to?(:original_password) && uri.original_password
- message = message.sub(uri.original_password, 'REDACTED')
- end
-
- new(message, uri.to_s, original_uri)
- end
-
attr_accessor :uri, :original_uri
- def initialize(message, uri, original_uri = nil)
- super message
+ def initialize(message, uri)
+ @original_uri = uri.dup
+ uri = Gem::PrintableUri.parse_uri(uri)
+
+ super(uri.valid_uri? && uri.original_password ? message.sub(uri.original_password, 'REDACTED') : message)
- @uri = uri
- @original_uri = original_uri ? original_uri : uri
+ @uri = uri.to_s
end
def to_s # :nodoc:
@@ -225,20 +216,20 @@ class Gem::RemoteFetcher
head ? response : response.body
when Net::HTTPMovedPermanently, Net::HTTPFound, Net::HTTPSeeOther,
Net::HTTPTemporaryRedirect then
- raise FetchError.build('too many redirects', uri) if depth > 10
+ raise FetchError.new('too many redirects', uri) if depth > 10
unless location = response['Location']
- raise FetchError.build("redirecting but no redirect location was given", uri)
+ raise FetchError.new("redirecting but no redirect location was given", uri)
end
location = Gem::UriParser.parse_uri location
if https?(uri) && !https?(location)
- raise FetchError.build("redirecting to non-https resource: #{location}", uri)
+ raise FetchError.new("redirecting to non-https resource: #{location}", uri)
end
fetch_http(location, last_modified, head, depth + 1)
else
- raise FetchError.build("bad response #{response.message} #{response.code}", uri)
+ raise FetchError.new("bad response #{response.message} #{response.code}", uri)
end
end
@@ -260,21 +251,21 @@ class Gem::RemoteFetcher
begin
data = Gem::Util.gunzip data
rescue Zlib::GzipFile::Error
- raise FetchError.build("server did not return a valid file", uri)
+ raise FetchError.new("server did not return a valid file", uri)
end
end
data
rescue Timeout::Error, IOError, SocketError, SystemCallError,
*(OpenSSL::SSL::SSLError if Gem::HAVE_OPENSSL) => e
- raise FetchError.build("#{e.class}: #{e}", uri)
+ raise FetchError.new("#{e.class}: #{e}", uri)
end
def fetch_s3(uri, mtime = nil, head = false)
begin
public_uri = s3_uri_signer(uri).sign
rescue Gem::S3URISigner::ConfigurationError, Gem::S3URISigner::InstanceProfileError => e
- raise FetchError.build(e.message, "s3://#{uri.host}")
+ raise FetchError.new(e.message, "s3://#{uri.host}")
end
fetch_https public_uri, mtime, head
end
diff --git a/lib/rubygems/request.rb b/lib/rubygems/request.rb
index d0d9b58dd1..fdc4c55da0 100644
--- a/lib/rubygems/request.rb
+++ b/lib/rubygems/request.rb
@@ -127,7 +127,7 @@ class Gem::Request
@connection_pool.checkout
rescue Gem::HAVE_OPENSSL ? OpenSSL::SSL::SSLError : Errno::EHOSTDOWN,
Errno::EHOSTDOWN => e
- raise Gem::RemoteFetcher::FetchError.build(e.message, uri)
+ raise Gem::RemoteFetcher::FetchError.new(e.message, uri)
end
def fetch
@@ -228,14 +228,14 @@ class Gem::Request
reset connection
- raise Gem::RemoteFetcher::FetchError.build('too many bad responses', @uri) if bad_response
+ raise Gem::RemoteFetcher::FetchError.new('too many bad responses', @uri) if bad_response
bad_response = true
retry
rescue Net::HTTPFatalError
verbose "fatal error"
- raise Gem::RemoteFetcher::FetchError.build('fatal error', @uri)
+ raise Gem::RemoteFetcher::FetchError.new('fatal error', @uri)
# HACK work around EOFError bug in Net::HTTP
# NOTE Errno::ECONNABORTED raised a lot on Windows, and make impossible
# to install gems.
@@ -245,7 +245,7 @@ class Gem::Request
requests = @requests[connection.object_id]
verbose "connection reset after #{requests} requests, retrying"
- raise Gem::RemoteFetcher::FetchError.build('too many connection resets', @uri) if retried
+ raise Gem::RemoteFetcher::FetchError.new('too many connection resets', @uri) if retried
reset connection
diff --git a/test/rubygems/test_gem_commands_sources_command.rb b/test/rubygems/test_gem_commands_sources_command.rb
index 6fcbbf657b..7bca0f3803 100644
--- a/test/rubygems/test_gem_commands_sources_command.rb
+++ b/test/rubygems/test_gem_commands_sources_command.rb
@@ -182,7 +182,7 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
uri = "http://beta-gems.example.com/specs.#{@marshal_version}.gz"
@fetcher.data[uri] = proc do
- raise Gem::RemoteFetcher::FetchError.build('it died', uri)
+ raise Gem::RemoteFetcher::FetchError.new('it died', uri)
end
@cmd.handle_options %w[--add http://beta-gems.example.com]
diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb
index b4c82ce588..5ce420b91a 100644
--- a/test/rubygems/test_gem_remote_fetcher.rb
+++ b/test/rubygems/test_gem_remote_fetcher.rb
@@ -204,7 +204,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
@test_data
end
- raise Gem::RemoteFetcher::FetchError.build("haha!", '')
+ raise Gem::RemoteFetcher::FetchError.new("haha!", '')
end
end
diff --git a/test/rubygems/test_gem_resolver_best_set.rb b/test/rubygems/test_gem_resolver_best_set.rb
index a448ec05a4..0e279d16a8 100644
--- a/test/rubygems/test_gem_resolver_best_set.rb
+++ b/test/rubygems/test_gem_resolver_best_set.rb
@@ -106,7 +106,7 @@ class TestGemResolverBestSet < Gem::TestCase
error_uri = api_uri + 'a'
- error = Gem::RemoteFetcher::FetchError.build 'bogus', error_uri
+ error = Gem::RemoteFetcher::FetchError.new 'bogus', error_uri
set.replace_failed_api_set error
@@ -124,7 +124,7 @@ class TestGemResolverBestSet < Gem::TestCase
set.sets << index_set
- error = Gem::RemoteFetcher::FetchError.build 'bogus', @gem_repo
+ error = Gem::RemoteFetcher::FetchError.new 'bogus', @gem_repo
e = assert_raise Gem::RemoteFetcher::FetchError do
set.replace_failed_api_set error
@@ -145,7 +145,7 @@ class TestGemResolverBestSet < Gem::TestCase
error_uri = api_uri + 'a'
- error = Gem::RemoteFetcher::FetchError.build 'bogus', error_uri
+ error = Gem::RemoteFetcher::FetchError.new 'bogus', error_uri
set.replace_failed_api_set error
diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb
index be862aa138..afae46e120 100644
--- a/test/rubygems/test_gem_spec_fetcher.rb
+++ b/test/rubygems/test_gem_spec_fetcher.rb
@@ -144,7 +144,7 @@ class TestGemSpecFetcher < Gem::TestCase
def test_spec_for_dependency_bad_fetch_spec
src = Gem::Source.new(@gem_repo)
def src.fetch_spec(name)
- raise Gem::RemoteFetcher::FetchError.build("bad news from the internet", @uri)
+ raise Gem::RemoteFetcher::FetchError.new("bad news from the internet", @uri)
end
Gem.sources.replace [src]
diff --git a/test/rubygems/test_remote_fetch_error.rb b/test/rubygems/test_remote_fetch_error.rb
index cdc9ddad77..b9e58389d3 100644
--- a/test/rubygems/test_remote_fetch_error.rb
+++ b/test/rubygems/test_remote_fetch_error.rb
@@ -3,17 +3,17 @@ require_relative 'helper'
class TestRemoteFetchError < Gem::TestCase
def test_password_redacted
- error = Gem::RemoteFetcher::FetchError.build('There was an error fetching', 'https://user:[email protected]')
+ error = Gem::RemoteFetcher::FetchError.new('There was an error fetching', 'https://user:[email protected]')
refute_match %r{secret}, error.to_s
end
def test_invalid_url
- error = Gem::RemoteFetcher::FetchError.build('There was an error fetching', 'https://::gemsource.org')
+ error = Gem::RemoteFetcher::FetchError.new('There was an error fetching', 'https://::gemsource.org')
assert_equal error.to_s, 'There was an error fetching (https://::gemsource.org)'
end
def test_to_s
- error = Gem::RemoteFetcher::FetchError.build('There was an error fetching', 'https://gemsource.org')
+ error = Gem::RemoteFetcher::FetchError.new('There was an error fetching', 'https://gemsource.org')
assert_equal error.to_s, 'There was an error fetching (https://gemsource.org)'
end
end
diff --git a/test/rubygems/utilities.rb b/test/rubygems/utilities.rb
index 36513dcd31..20416fe70b 100644
--- a/test/rubygems/utilities.rb
+++ b/test/rubygems/utilities.rb
@@ -51,7 +51,7 @@ class Gem::FakeFetcher
raise ArgumentError, 'need full URI' unless path.start_with?("https://", "https://")
unless @data.key? path
- raise Gem::RemoteFetcher::FetchError.build("no data for #{path}", path)
+ raise Gem::RemoteFetcher::FetchError.new("no data for #{path}", path)
end
if @data[path].kind_of?(Array) && @data[path].first.kind_of?(Array)
@@ -124,7 +124,7 @@ class Gem::FakeFetcher
raise ArgumentError, 'need full URI' unless path =~ %r{^http://}
unless @data.key? path
- raise Gem::RemoteFetcher::FetchError.build("no data for #{path}", path)
+ raise Gem::RemoteFetcher::FetchError.new("no data for #{path}", path)
end
data = @data[path]