[前][次][番号順一覧][スレッド一覧]

ruby-changes:67487

From: Daniel <ko1@a...>
Date: Tue, 31 Aug 2021 19:08:12 +0900 (JST)
Subject: [ruby-changes:67487] 589377fbdc (master): [rubygems/rubygems] Refactor `Gem::RemoteFetcher::FetchError.build` back to its initialize method

https://git.ruby-lang.org/ruby.git/commit/?id=589377fbdc

From 589377fbdce9d281041535e3bf63f008689bb776 Mon Sep 17 00:00:00 2001
From: Daniel Niknam <mhmd.niknam@g...>
Date: Sun, 22 Aug 2021 20:06:02 +1000
Subject: [rubygems/rubygems] Refactor `Gem::RemoteFetcher::FetchError.build`
 back to its initialize method

https://github.com/rubygems/rubygems/commit/21dcdd2dc5
---
 lib/rubygems/remote_fetcher.rb                     | 35 ++++++++--------------
 lib/rubygems/request.rb                            |  8 ++---
 test/rubygems/test_gem_commands_sources_command.rb |  2 +-
 test/rubygems/test_gem_remote_fetcher.rb           |  2 +-
 test/rubygems/test_gem_resolver_best_set.rb        |  6 ++--
 test/rubygems/test_gem_spec_fetcher.rb             |  2 +-
 test/rubygems/test_remote_fetch_error.rb           |  6 ++--
 test/rubygems/utilities.rb                         |  4 +--
 8 files changed, 28 insertions(+), 37 deletions(-)

diff --git a/lib/rubygems/remote_fetcher.rb b/lib/rubygems/remote_fetcher.rb
index 60c5da0..ba1c1cb 100644
--- a/lib/rubygems/remote_fetcher.rb
+++ b/lib/rubygems/remote_fetcher.rb
@@ -22,24 +22,15 @@ class Gem::RemoteFetcher https://github.com/ruby/ruby/blob/trunk/lib/rubygems/remote_fetcher.rb#L22
   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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/remote_fetcher.rb#L216
       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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/remote_fetcher.rb#L251
       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 d0d9b58..fdc4c55 100644
--- a/lib/rubygems/request.rb
+++ b/lib/rubygems/request.rb
@@ -127,7 +127,7 @@ class Gem::Request https://github.com/ruby/ruby/blob/trunk/lib/rubygems/request.rb#L127
     @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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/request.rb#L228
 
       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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/request.rb#L245
       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 6fcbbf6..7bca0f3 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 https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_commands_sources_command.rb#L182
 
     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 b4c82ce..5ce420b 100644
--- a/test/rubygems/test_gem_remote_fetcher.rb
+++ b/test/rubygems/test_gem_remote_fetcher.rb
@@ -204,7 +204,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg== https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_remote_fetcher.rb#L204
           @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 a448ec0..0e279d1 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 https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_resolver_best_set.rb#L106
 
     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 https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_resolver_best_set.rb#L124
 
     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 https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_resolver_best_set.rb#L145
 
     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 be862aa..afae46e 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 https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_spec_fetcher.rb#L144
   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 cdc9dda..b9e5838 100644
--- a/test/rubygems/test_remote_fetch_error.rb
+++ b/test/rubygems/test_remote_fetch_error.rb
@@ -3,17 +3,17 @@ require_relative 'helper' https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_remote_fetch_error.rb#L3
 
 class TestRemoteFetchError < Gem::TestCase
   def test_password_redacted
-    error = Gem::RemoteFetcher::FetchError.build('There was an error fetching', 'https://user:secret@g...')
+    error = Gem::RemoteFetcher::FetchError.new('There was an error fetching', ' (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]