ruby/lib/bundler/fetcher/base.rb
Samuel Giddins b69bbf588a [rubygems/rubygems] User bundler UA when downloading gems
Gem::RemoteFetcher uses Gem::Request, which adds the RubyGems UA.
Gem::RemoteFetcher is used to download gems, as well as the full index.
We would like the bundler UA to be used whenever bundler is making
requests.

This PR also avoids unsafely mutating the headers hash on the shared
`Gem::RemoteFetcher.fetcher` instance, which could cause corruption or
incorrect headers when making parallel requests. Instead, we create one
remote fetcher per rubygems remote, which is similar to the connection
segregation bundler is already doing

f0e8dacdec
2023-11-15 08:33:14 +00:00

52 lines
1 KiB
Ruby

# frozen_string_literal: true
module Bundler
class Fetcher
class Base
attr_reader :downloader
attr_reader :display_uri
attr_reader :remote
attr_reader :gem_remote_fetcher
def initialize(downloader, remote, display_uri, gem_remote_fetcher)
raise "Abstract class" if self.class == Base
@downloader = downloader
@remote = remote
@display_uri = display_uri
@gem_remote_fetcher = gem_remote_fetcher
end
def remote_uri
@remote.uri
end
def fetch_uri
@fetch_uri ||= if remote_uri.host == "rubygems.org"
uri = remote_uri.dup
uri.host = "index.rubygems.org"
uri
else
remote_uri
end
end
def available?
true
end
def api_fetcher?
false
end
private
def log_specs(&block)
if Bundler.ui.debug?
Bundler.ui.debug yield
else
Bundler.ui.info ".", false
end
end
end
end
end