1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Merge RubyGems 3.2.27 and Bundler 2.2.27

This commit is contained in:
Hiroshi SHIBATA 2021-11-11 10:40:30 +09:00 committed by nagachika
parent 6d540c1b98
commit 31a7104852
112 changed files with 700 additions and 395 deletions

View file

@ -636,6 +636,12 @@ EOF
@rubygems = nil
end
def configure_gem_home_and_path(path = bundle_path)
configure_gem_path
configure_gem_home(path)
Bundler.rubygems.clear_paths
end
private
def eval_yaml_gemspec(path, contents)
@ -656,29 +662,17 @@ EOF
raise GemspecError, Dsl::DSLError.new(msg, path, e.backtrace, contents)
end
def configure_gem_home_and_path
configure_gem_path
configure_gem_home
bundle_path
end
def configure_gem_path(env = ENV)
blank_home = env["GEM_HOME"].nil? || env["GEM_HOME"].empty?
if !use_system_gems?
def configure_gem_path
unless use_system_gems?
# this needs to be empty string to cause
# PathSupport.split_gem_path to only load up the
# Bundler --path setting as the GEM_PATH.
env["GEM_PATH"] = ""
elsif blank_home
possibles = [Bundler.rubygems.gem_dir, Bundler.rubygems.gem_path]
paths = possibles.flatten.compact.uniq.reject(&:empty?)
env["GEM_PATH"] = paths.join(File::PATH_SEPARATOR)
Bundler::SharedHelpers.set_env "GEM_PATH", ""
end
end
def configure_gem_home
Bundler::SharedHelpers.set_env "GEM_HOME", File.expand_path(bundle_path, root)
Bundler.rubygems.clear_paths
def configure_gem_home(path)
Bundler::SharedHelpers.set_env "GEM_HOME", path.to_s
end
def tmp_home_path

View file

@ -15,7 +15,7 @@ module Bundler
definition.validate_runtime!
begin
definition.resolve_with_cache!
definition.resolve_only_locally!
not_installed = definition.missing_specs
rescue GemNotFound, VersionConflict
Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies."

View file

@ -161,6 +161,12 @@ module Bundler
@multisource_allowed
end
def resolve_only_locally!
@remote = false
sources.local_only!
resolve
end
def resolve_with_cache!
sources.cached!
resolve

View file

@ -1,6 +1,5 @@
# frozen_string_literal: true
require "rubygems/dependency_installer"
require_relative "worker"
require_relative "installer/parallel_installer"
require_relative "installer/standalone"

View file

@ -13,6 +13,7 @@ module Bundler
class MalformattedPlugin < PluginError; end
class UndefinedCommandError < PluginError; end
class UnknownSourceError < PluginError; end
class PluginInstallError < PluginError; end
PLUGIN_FILE_NAME = "plugins.rb".freeze
@ -38,12 +39,11 @@ module Bundler
specs = Installer.new.install(names, options)
save_plugins names, specs
rescue PluginError => e
rescue PluginError
specs_to_delete = specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }
specs_to_delete.each_value {|spec| Bundler.rm_rf(spec.full_gem_path) }
names_list = names.map {|name| "`#{name}`" }.join(", ")
Bundler.ui.error "Failed to install the following plugins: #{names_list}. The underlying error was: #{e.message}.\n #{e.backtrace.join("\n ")}"
raise
end
# Uninstalls plugins by the given names
@ -245,10 +245,11 @@ module Bundler
# @param [Array<String>] names of inferred source plugins that can be ignored
def save_plugins(plugins, specs, optional_plugins = [])
plugins.each do |name|
next if index.installed?(name)
spec = specs[name]
validate_plugin! Pathname.new(spec.full_gem_path)
installed = register_plugin(name, spec, optional_plugins.include?(name))
Bundler.ui.info "Installed plugin #{name}" if installed
save_plugin(name, spec, optional_plugins.include?(name))
end
end
@ -263,6 +264,22 @@ module Bundler
raise MalformattedPlugin, "#{PLUGIN_FILE_NAME} was not found in the plugin." unless plugin_file.file?
end
# Validates and registers a plugin.
#
# @param [String] name the name of the plugin
# @param [Specification] spec of installed plugin
# @param [Boolean] optional_plugin, removed if there is conflict with any
# other plugin (used for default source plugins)
#
# @raise [PluginInstallError] if validation or registration raises any error
def save_plugin(name, spec, optional_plugin = false)
validate_plugin! Pathname.new(spec.full_gem_path)
installed = register_plugin(name, spec, optional_plugin)
Bundler.ui.info "Installed plugin #{name}" if installed
rescue PluginError => e
raise PluginInstallError, "Failed to install plugin `#{spec.name}`, due to #{e.class} (#{e.message})"
end
# Runs the plugins.rb file in an isolated namespace, records the plugin
# actions it registers for and then passes the data to index to be stored.
#

View file

@ -81,6 +81,8 @@ module Bundler
deps = names.map {|name| Dependency.new name, version }
Bundler.configure_gem_home_and_path(Plugin.root)
definition = Definition.new(nil, deps, source_list, true)
install_definition(definition)
end

View file

@ -34,10 +34,12 @@ module Bundler
end
def build_args
require "rubygems/command"
Gem::Command.build_args
end
def build_args=(args)
require "rubygems/command"
Gem::Command.build_args = args
end

View file

@ -419,7 +419,15 @@ module Bundler
elsif is_credential(key)
"[REDACTED]"
elsif is_userinfo(converted)
converted.gsub(/:.*$/, ":[REDACTED]")
username, pass = converted.split(":", 2)
if pass == "x-oauth-basic"
username = "[REDACTED]"
else
pass = "[REDACTED]"
end
[username, pass].join(":")
else
converted
end

View file

@ -36,6 +36,8 @@ module Bundler
def local!; end
def local_only!; end
def cached!; end
def remote!; end

View file

@ -26,6 +26,13 @@ module Bundler
Array(options["remotes"]).reverse_each {|r| add_remote(r) }
end
def local_only!
@specs = nil
@allow_local = true
@allow_cached = false
@allow_remote = false
end
def local!
return if @allow_local
@ -137,7 +144,7 @@ module Bundler
end
end
if (installed?(spec) || Plugin.installed?(spec.name)) && !force
if installed?(spec) && !force
print_using_message "Using #{version_message(spec)}"
return nil # no post-install message
end

View file

@ -136,6 +136,10 @@ module Bundler
different_sources?(lock_sources, replacement_sources)
end
def local_only!
all_sources.each(&:local_only!)
end
def cached!
all_sources.each(&:cached!)
end

View file

@ -24,7 +24,7 @@ module Bundler
specs_for_dep = spec_for_dependency(dep, match_current_platform)
if specs_for_dep.any?
specs += specs_for_dep
match_current_platform ? specs += specs_for_dep : specs |= specs_for_dep
specs_for_dep.first.dependencies.each do |d|
next if d.type == :development

View file

@ -2,7 +2,8 @@ name: Ruby
on:
push:
- <%= config[:git_default_branch] %>
branches:
- <%= config[:git_default_branch] %>
pull_request:

View file

@ -1,7 +1,7 @@
# frozen_string_literal: false
module Bundler
VERSION = "2.2.26".freeze
VERSION = "2.2.27".freeze
def self.bundler_major_version
@bundler_major_version ||= VERSION.split(".").first.to_i

View file

@ -8,15 +8,15 @@
require 'rbconfig'
module Gem
VERSION = "3.2.26".freeze
VERSION = "3.2.27".freeze
end
# Must be first since it unloads the prelude from 1.9.2
require 'rubygems/compatibility'
require_relative 'rubygems/compatibility'
require 'rubygems/defaults'
require 'rubygems/deprecate'
require 'rubygems/errors'
require_relative 'rubygems/defaults'
require_relative 'rubygems/deprecate'
require_relative 'rubygems/errors'
##
# RubyGems is the Ruby standard for publishing and managing third party
@ -559,7 +559,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
# => [#<Gem::Specification:0x1013b4528 @name="minitest", ...>]
def self.install(name, version = Gem::Requirement.default, *options)
require "rubygems/dependency_installer"
require_relative "rubygems/dependency_installer"
inst = Gem::DependencyInstaller.new(*options)
inst.install name, version
inst.installed_gems
@ -625,12 +625,12 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
rescue ::LoadError
# If we can't load psych, that's fine, go on.
else
require 'rubygems/psych_additions'
require 'rubygems/psych_tree'
require_relative 'rubygems/psych_additions'
require_relative 'rubygems/psych_tree'
end
require 'yaml'
require 'rubygems/safe_yaml'
require_relative 'rubygems/safe_yaml'
@yaml_loaded = true
end
@ -990,7 +990,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
# Lazily loads DefaultUserInteraction and returns the default UI.
def self.ui
require 'rubygems/user_interaction'
require_relative 'rubygems/user_interaction'
Gem::DefaultUserInteraction.ui
end
@ -1110,7 +1110,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
end
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
require 'rubygems/user_interaction'
require_relative 'rubygems/user_interaction'
require "bundler"
begin
Gem::DefaultUserInteraction.use_ui(ui) do
@ -1322,7 +1322,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
autoload :Version, File.expand_path('rubygems/version', __dir__)
end
require 'rubygems/exceptions'
require_relative 'rubygems/exceptions'
# REFACTOR: This should be pulled out into some kind of hacks file.
begin
@ -1353,6 +1353,6 @@ end
# Loads the default specs.
Gem::Specification.load_defaults
require 'rubygems/core_ext/kernel_gem'
require 'rubygems/core_ext/kernel_require'
require 'rubygems/core_ext/kernel_warn'
require_relative 'rubygems/core_ext/kernel_gem'
require_relative 'rubygems/core_ext/kernel_require'
require_relative 'rubygems/core_ext/kernel_warn'

View file

@ -5,9 +5,9 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems/command'
require 'rubygems/user_interaction'
require 'rubygems/text'
require_relative 'command'
require_relative 'user_interaction'
require_relative 'text'
##
# The command manager registers and installs all the individual sub-commands

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/package'
require 'rubygems/version_option'
require_relative '../command'
require_relative '../package'
require_relative '../version_option'
class Gem::Commands::BuildCommand < Gem::Command
include Gem::VersionOption

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/security'
require_relative '../command'
require_relative '../security'
class Gem::Commands::CertCommand < Gem::Command
def initialize

View file

@ -1,8 +1,8 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/version_option'
require 'rubygems/validator'
require 'rubygems/doctor'
require_relative '../command'
require_relative '../version_option'
require_relative '../validator'
require_relative '../doctor'
class Gem::Commands::CheckCommand < Gem::Command
include Gem::VersionOption

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/dependency_list'
require 'rubygems/uninstaller'
require_relative '../command'
require_relative '../dependency_list'
require_relative '../uninstaller'
class Gem::Commands::CleanupCommand < Gem::Command
def initialize

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/version_option'
require_relative '../command'
require_relative '../version_option'
class Gem::Commands::ContentsCommand < Gem::Command
include Gem::VersionOption

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/local_remote_options'
require 'rubygems/version_option'
require_relative '../command'
require_relative '../local_remote_options'
require_relative '../version_option'
class Gem::Commands::DependencyCommand < Gem::Command
include Gem::LocalRemoteOptions

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require_relative '../command'
class Gem::Commands::EnvironmentCommand < Gem::Command
def initialize

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/local_remote_options'
require 'rubygems/version_option'
require_relative '../command'
require_relative '../local_remote_options'
require_relative '../version_option'
class Gem::Commands::FetchCommand < Gem::Command
include Gem::LocalRemoteOptions

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/indexer'
require_relative '../command'
require_relative '../indexer'
##
# Generates a index files for use as a gem server.

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require_relative '../command'
class Gem::Commands::HelpCommand < Gem::Command
# :stopdoc:

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/query_utils'
require_relative '../command'
require_relative '../query_utils'
class Gem::Commands::InfoCommand < Gem::Command
include Gem::QueryUtils

View file

@ -1,10 +1,10 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/install_update_options'
require 'rubygems/dependency_installer'
require 'rubygems/local_remote_options'
require 'rubygems/validator'
require 'rubygems/version_option'
require_relative '../command'
require_relative '../install_update_options'
require_relative '../dependency_installer'
require_relative '../local_remote_options'
require_relative '../validator'
require_relative '../version_option'
##
# Gem installer command line tool
@ -169,7 +169,7 @@ You can use `i` command instead of `install`.
end
def install_from_gemdeps # :nodoc:
require 'rubygems/request_set'
require_relative '../request_set'
rs = Gem::RequestSet.new
specs = rs.install_from_gemdeps options do |req, inst|
@ -244,11 +244,11 @@ You can use `i` command instead of `install`.
def load_hooks # :nodoc:
if options[:install_as_default]
require 'rubygems/install_default_message'
require_relative '../install_default_message'
else
require 'rubygems/install_message'
require_relative '../install_message'
end
require 'rubygems/rdoc'
require_relative '../rdoc'
end
def show_install_errors(errors) # :nodoc:
@ -257,7 +257,8 @@ You can use `i` command instead of `install`.
errors.each do |x|
return unless Gem::SourceFetchProblem === x
msg = "Unable to pull data from '#{x.source.uri}': #{x.error.message}"
require_relative "../uri"
msg = "Unable to pull data from '#{Gem::Uri.new(x.source.uri).redacted}': #{x.error.message}"
alert_warning msg
end

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/query_utils'
require_relative '../command'
require_relative '../query_utils'
##
# Searches for gems starting with the supplied argument.

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require_relative '../command'
class Gem::Commands::LockCommand < Gem::Command
def initialize

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require_relative '../command'
unless defined? Gem::Commands::MirrorCommand
class Gem::Commands::MirrorCommand < Gem::Command

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/version_option'
require_relative '../command'
require_relative '../version_option'
class Gem::Commands::OpenCommand < Gem::Command
include Gem::VersionOption

View file

@ -1,8 +1,8 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/local_remote_options'
require 'rubygems/spec_fetcher'
require 'rubygems/version_option'
require_relative '../command'
require_relative '../local_remote_options'
require_relative '../spec_fetcher'
require_relative '../version_option'
class Gem::Commands::OutdatedCommand < Gem::Command
include Gem::LocalRemoteOptions

View file

@ -1,8 +1,8 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/local_remote_options'
require 'rubygems/gemcutter_utilities'
require 'rubygems/text'
require_relative '../command'
require_relative '../local_remote_options'
require_relative '../gemcutter_utilities'
require_relative '../text'
class Gem::Commands::OwnerCommand < Gem::Command
include Gem::Text

View file

@ -1,8 +1,8 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/package'
require 'rubygems/installer'
require 'rubygems/version_option'
require_relative '../command'
require_relative '../package'
require_relative '../installer'
require_relative '../version_option'
class Gem::Commands::PristineCommand < Gem::Command
include Gem::VersionOption
@ -138,7 +138,7 @@ extensions will be restored.
gem = spec.cache_file
unless File.exist? gem or options[:only_executables] or options[:only_plugins]
require 'rubygems/remote_fetcher'
require_relative '../remote_fetcher'
say "Cached gem for #{spec.full_name} not found, attempting to fetch..."

View file

@ -1,8 +1,8 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/local_remote_options'
require 'rubygems/gemcutter_utilities'
require 'rubygems/package'
require_relative '../command'
require_relative '../local_remote_options'
require_relative '../gemcutter_utilities'
require_relative '../package'
class Gem::Commands::PushCommand < Gem::Command
include Gem::LocalRemoteOptions

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/query_utils'
require 'rubygems/deprecate'
require_relative '../command'
require_relative '../query_utils'
require_relative '../deprecate'
class Gem::Commands::QueryCommand < Gem::Command
extend Gem::Deprecate

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/version_option'
require 'rubygems/rdoc'
require_relative '../command'
require_relative '../version_option'
require_relative '../rdoc'
require 'fileutils'
class Gem::Commands::RdocCommand < Gem::Command

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/query_utils'
require_relative '../command'
require_relative '../query_utils'
class Gem::Commands::SearchCommand < Gem::Command
include Gem::QueryUtils

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/server'
require 'rubygems/deprecate'
require_relative '../command'
require_relative '../server'
require_relative '../deprecate'
class Gem::Commands::ServerCommand < Gem::Command
extend Gem::Deprecate

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require_relative '../command'
##
# Installs RubyGems itself. This command is ordinarily only available from a
@ -348,7 +348,7 @@ By default, this RubyGems will install gem as:
rm_rf dir
end
require 'rubygems/rdoc'
require_relative '../rdoc'
fake_spec = Gem::Specification.new 'rubygems', Gem::VERSION
def fake_spec.full_gem_path
@ -407,7 +407,7 @@ By default, this RubyGems will install gem as:
cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e)
end
require 'rubygems/installer'
require_relative '../installer'
Dir.chdir("bundler") do
built_gem = Gem::Package.build(bundler_spec)
@ -596,7 +596,7 @@ abort "#{deprecation_message}"
end
def uninstall_old_gemcutter
require 'rubygems/uninstaller'
require_relative '../uninstaller'
ui = Gem::Uninstaller.new('gemcutter', :all => true, :ignore => true,
:version => '< 0.4')
@ -605,7 +605,7 @@ abort "#{deprecation_message}"
end
def regenerate_binstubs
require "rubygems/commands/pristine_command"
require_relative "pristine_command"
say "Regenerating binstubs"
args = %w[--all --only-executables --silent]

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/gemcutter_utilities'
require_relative '../command'
require_relative '../gemcutter_utilities'
class Gem::Commands::SigninCommand < Gem::Command
include Gem::GemcutterUtilities

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require_relative '../command'
class Gem::Commands::SignoutCommand < Gem::Command
def initialize

View file

@ -1,8 +1,8 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/remote_fetcher'
require 'rubygems/spec_fetcher'
require 'rubygems/local_remote_options'
require_relative '../command'
require_relative '../remote_fetcher'
require_relative '../spec_fetcher'
require_relative '../local_remote_options'
class Gem::Commands::SourcesCommand < Gem::Command
include Gem::LocalRemoteOptions

View file

@ -1,8 +1,8 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/local_remote_options'
require 'rubygems/version_option'
require 'rubygems/package'
require_relative '../command'
require_relative '../local_remote_options'
require_relative '../version_option'
require_relative '../package'
class Gem::Commands::SpecificationCommand < Gem::Command
include Gem::LocalRemoteOptions

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require_relative '../command'
class Gem::Commands::StaleCommand < Gem::Command
def initialize

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/version_option'
require 'rubygems/uninstaller'
require_relative '../command'
require_relative '../version_option'
require_relative '../uninstaller'
require 'fileutils'
##

View file

@ -1,9 +1,9 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/version_option'
require 'rubygems/security_option'
require 'rubygems/remote_fetcher'
require 'rubygems/package'
require_relative '../command'
require_relative '../version_option'
require_relative '../security_option'
require_relative '../remote_fetcher'
require_relative '../package'
# forward-declare

View file

@ -1,13 +1,13 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/command_manager'
require 'rubygems/dependency_installer'
require 'rubygems/install_update_options'
require 'rubygems/local_remote_options'
require 'rubygems/spec_fetcher'
require 'rubygems/version_option'
require 'rubygems/install_message' # must come before rdoc for messaging
require 'rubygems/rdoc'
require_relative '../command'
require_relative '../command_manager'
require_relative '../dependency_installer'
require_relative '../install_update_options'
require_relative '../local_remote_options'
require_relative '../spec_fetcher'
require_relative '../version_option'
require_relative '../install_message' # must come before rdoc for messaging
require_relative '../rdoc'
class Gem::Commands::UpdateCommand < Gem::Command
include Gem::InstallUpdateOptions

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require_relative '../command'
class Gem::Commands::WhichCommand < Gem::Command
def initialize

View file

@ -1,8 +1,8 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/local_remote_options'
require 'rubygems/version_option'
require 'rubygems/gemcutter_utilities'
require_relative '../command'
require_relative '../local_remote_options'
require_relative '../version_option'
require_relative '../gemcutter_utilities'
class Gem::Commands::YankCommand < Gem::Command
include Gem::LocalRemoteOptions

View file

@ -5,7 +5,7 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems/user_interaction'
require_relative 'user_interaction'
require 'rbconfig'
##

View file

@ -1,12 +1,12 @@
# frozen_string_literal: true
require 'rubygems'
require 'rubygems/dependency_list'
require 'rubygems/package'
require 'rubygems/installer'
require 'rubygems/spec_fetcher'
require 'rubygems/user_interaction'
require 'rubygems/available_set'
require 'rubygems/deprecate'
require_relative '../rubygems'
require_relative 'dependency_list'
require_relative 'package'
require_relative 'installer'
require_relative 'spec_fetcher'
require_relative 'user_interaction'
require_relative 'available_set'
require_relative 'deprecate'
##
# Installs a gem along with all its dependencies from local and remote gems.

View file

@ -6,7 +6,7 @@
#++
require 'tsort'
require 'rubygems/deprecate'
require_relative 'deprecate'
##
# Gem::DependencyList is used for installing and uninstalling gems in the

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems'
require 'rubygems/user_interaction'
require_relative '../rubygems'
require_relative 'user_interaction'
##
# Cleans up after a partially-failed uninstall or for an invalid

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/deprecate'
require_relative 'deprecate'
##
# Base exception class for RubyGems. All exception raised by RubyGems are a

View file

@ -5,9 +5,9 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems'
require 'rubygems/command_manager'
require 'rubygems/deprecate'
require_relative '../rubygems'
require_relative 'command_manager'
require_relative 'deprecate'
##
# Load additional plugins from $LOAD_PATH

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems/remote_fetcher'
require 'rubygems/text'
require_relative 'remote_fetcher'
require_relative 'text'
##
# Utility methods for using the RubyGems API.

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems'
require 'rubygems/package'
require_relative '../rubygems'
require_relative 'package'
require 'tmpdir'
##

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems'
require 'rubygems/user_interaction'
require_relative '../rubygems'
require_relative 'user_interaction'
##
# A post-install hook that displays "Successfully installed

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'rubygems'
require 'rubygems/user_interaction'
require_relative '../rubygems'
require_relative 'user_interaction'
##
# A default post-install hook that displays "Successfully installed

View file

@ -5,8 +5,8 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems'
require 'rubygems/security_option'
require_relative '../rubygems'
require_relative 'security_option'
##
# Mixin methods for install and update options for Gem::Commands

View file

@ -5,13 +5,13 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems/command'
require 'rubygems/installer_uninstaller_utils'
require 'rubygems/exceptions'
require 'rubygems/deprecate'
require 'rubygems/package'
require 'rubygems/ext'
require 'rubygems/user_interaction'
require_relative 'command'
require_relative 'installer_uninstaller_utils'
require_relative 'exceptions'
require_relative 'deprecate'
require_relative 'package'
require_relative 'ext'
require_relative 'user_interaction'
##
# The installer installs the files contained in the .gem into the Gem.home.

View file

@ -6,7 +6,7 @@
#++
require 'uri'
require 'rubygems'
require_relative '../rubygems'
##
# Mixin methods for local and remote Gem::Command options.

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/user_interaction'
require_relative 'user_interaction'
##
# This Gem::StreamUI subclass records input and output to StringIO for

View file

@ -41,9 +41,9 @@
# #files are the files in the .gem tar file, not the Ruby files in the gem
# #extract_files and #contents automatically call #verify
require "rubygems"
require 'rubygems/security'
require 'rubygems/user_interaction'
require_relative "../rubygems"
require_relative 'security'
require_relative 'user_interaction'
class Gem::Package
include Gem::UserInteraction
@ -702,12 +702,12 @@ EOM
end
end
require 'rubygems/package/digest_io'
require 'rubygems/package/source'
require 'rubygems/package/file_source'
require 'rubygems/package/io_source'
require 'rubygems/package/old'
require 'rubygems/package/tar_header'
require 'rubygems/package/tar_reader'
require 'rubygems/package/tar_reader/entry'
require 'rubygems/package/tar_writer'
require_relative 'package/digest_io'
require_relative 'package/source'
require_relative 'package/file_source'
require_relative 'package/io_source'
require_relative 'package/old'
require_relative 'package/tar_header'
require_relative 'package/tar_reader'
require_relative 'package/tar_reader/entry'
require_relative 'package/tar_writer'

View file

@ -121,4 +121,4 @@ class Gem::Package::TarReader
end
end
require 'rubygems/package/tar_reader/entry'
require_relative 'tar_reader/entry'

View file

@ -20,8 +20,8 @@
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
require 'rubygems'
require 'rubygems/package'
require_relative '../rubygems'
require_relative 'package'
require 'rake/packagetask'
##

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require "rubygems/deprecate"
require_relative "deprecate"
##
# Available list of platforms for targeting Gem installations.

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems'
require_relative '../rubygems'
begin
require 'rdoc/rubygems_hook'

View file

@ -1,11 +1,11 @@
# frozen_string_literal: true
require 'rubygems'
require 'rubygems/request'
require 'rubygems/request/connection_pools'
require 'rubygems/s3_uri_signer'
require 'rubygems/uri_formatter'
require 'rubygems/uri_parsing'
require 'rubygems/user_interaction'
require_relative '../rubygems'
require_relative 'request'
require_relative 'request/connection_pools'
require_relative 's3_uri_signer'
require_relative 'uri_formatter'
require_relative 'uri'
require_relative 'user_interaction'
##
# RemoteFetcher handles the details of fetching gems and gem information from
@ -13,30 +13,24 @@ require 'rubygems/user_interaction'
class Gem::RemoteFetcher
include Gem::UserInteraction
include Gem::UriParsing
##
# A FetchError exception wraps up the various possible IO and HTTP failures
# that could happen while downloading from the internet.
class FetchError < Gem::Exception
include Gem::UriParsing
##
# The URI which was being accessed when the exception happened.
attr_accessor :uri, :original_uri
def initialize(message, uri)
super message
uri = Gem::Uri.new(uri)
uri = parse_uri(uri)
super uri.redact_credentials_from(message)
@original_uri = uri.dup
uri.password = 'REDACTED' if uri.respond_to?(:password) && uri.password
@uri = uri.to_s
@original_uri = uri.to_s
@uri = uri.redacted.to_s
end
def to_s # :nodoc:
@ -132,7 +126,7 @@ class Gem::RemoteFetcher
require "fileutils"
FileUtils.mkdir_p cache_dir rescue nil unless File.exist? cache_dir
source_uri = parse_uri(source_uri)
source_uri = Gem::Uri.new(source_uri)
scheme = source_uri.scheme
@ -227,7 +221,7 @@ class Gem::RemoteFetcher
unless location = response['Location']
raise FetchError.new("redirecting but no redirect location was given", uri)
end
location = parse_uri location
location = Gem::Uri.new location
if https?(uri) && !https?(location)
raise FetchError.new("redirecting to non-https resource: #{location}", uri)
@ -245,7 +239,7 @@ class Gem::RemoteFetcher
# Downloads +uri+ and returns it as a String.
def fetch_path(uri, mtime = nil, head = false)
uri = parse_uri uri
uri = Gem::Uri.new uri
unless uri.scheme
raise ArgumentError, "uri scheme is invalid: #{uri.scheme.inspect}"

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'net/http'
require 'rubygems/user_interaction'
require_relative 'user_interaction'
class Gem::Request
extend Gem::UserInteraction
@ -191,7 +191,7 @@ class Gem::Request
begin
@requests[connection.object_id] += 1
verbose "#{request.method} #{@uri}"
verbose "#{request.method} #{Gem::Uri.new(@uri).redacted}"
file_name = File.basename(@uri.path)
# perform download progress reporter only for gems
@ -287,6 +287,6 @@ class Gem::Request
end
end
require 'rubygems/request/http_pool'
require 'rubygems/request/https_pool'
require 'rubygems/request/connection_pools'
require_relative 'request/http_pool'
require_relative 'request/https_pool'
require_relative 'request/connection_pools'

View file

@ -303,7 +303,7 @@ class Gem::RequestSet
end
end
require "rubygems/dependency_installer"
require_relative "dependency_installer"
inst = Gem::DependencyInstaller.new options
inst.installed_gems.replace specs
@ -461,6 +461,6 @@ class Gem::RequestSet
end
end
require 'rubygems/request_set/gem_dependency_api'
require 'rubygems/request_set/lockfile'
require 'rubygems/request_set/lockfile/tokenizer'
require_relative 'request_set/gem_dependency_api'
require_relative 'request_set/lockfile'
require_relative 'request_set/lockfile/tokenizer'

View file

@ -236,4 +236,4 @@ class Gem::RequestSet::Lockfile
end
end
require 'rubygems/request_set/lockfile/tokenizer'
require_relative 'lockfile/tokenizer'

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/request_set/lockfile/parser'
require_relative 'parser'
class Gem::RequestSet::Lockfile::Tokenizer
Token = Struct.new :type, :value, :column, :line

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require "rubygems/deprecate"
require_relative "deprecate"
##
# A Requirement is a set of one or more version restrictions. It supports a

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'rubygems/dependency'
require 'rubygems/exceptions'
require 'rubygems/util/list'
require_relative 'dependency'
require_relative 'exceptions'
require_relative 'util/list'
##
# Given a set of Gem::Dependency objects as +needed+ and a way to query the
@ -10,7 +10,7 @@ require 'rubygems/util/list'
# all the requirements.
class Gem::Resolver
require 'rubygems/resolver/molinillo'
require_relative 'resolver/molinillo'
##
# If the DEBUG_RESOLVER environment variable is set then debugging mode is
@ -318,30 +318,30 @@ class Gem::Resolver
private :amount_constrained
end
require 'rubygems/resolver/activation_request'
require 'rubygems/resolver/conflict'
require 'rubygems/resolver/dependency_request'
require 'rubygems/resolver/requirement_list'
require 'rubygems/resolver/stats'
require_relative 'resolver/activation_request'
require_relative 'resolver/conflict'
require_relative 'resolver/dependency_request'
require_relative 'resolver/requirement_list'
require_relative 'resolver/stats'
require 'rubygems/resolver/set'
require 'rubygems/resolver/api_set'
require 'rubygems/resolver/composed_set'
require 'rubygems/resolver/best_set'
require 'rubygems/resolver/current_set'
require 'rubygems/resolver/git_set'
require 'rubygems/resolver/index_set'
require 'rubygems/resolver/installer_set'
require 'rubygems/resolver/lock_set'
require 'rubygems/resolver/vendor_set'
require 'rubygems/resolver/source_set'
require_relative 'resolver/set'
require_relative 'resolver/api_set'
require_relative 'resolver/composed_set'
require_relative 'resolver/best_set'
require_relative 'resolver/current_set'
require_relative 'resolver/git_set'
require_relative 'resolver/index_set'
require_relative 'resolver/installer_set'
require_relative 'resolver/lock_set'
require_relative 'resolver/vendor_set'
require_relative 'resolver/source_set'
require 'rubygems/resolver/specification'
require 'rubygems/resolver/spec_specification'
require 'rubygems/resolver/api_specification'
require 'rubygems/resolver/git_specification'
require 'rubygems/resolver/index_specification'
require 'rubygems/resolver/installed_specification'
require 'rubygems/resolver/local_specification'
require 'rubygems/resolver/lock_specification'
require 'rubygems/resolver/vendor_specification'
require_relative 'resolver/specification'
require_relative 'resolver/spec_specification'
require_relative 'resolver/api_specification'
require_relative 'resolver/git_specification'
require_relative 'resolver/index_specification'
require_relative 'resolver/installed_specification'
require_relative 'resolver/local_specification'
require_relative 'resolver/lock_specification'
require_relative 'resolver/vendor_specification'

View file

@ -21,7 +21,7 @@ class Gem::Resolver::GitSpecification < Gem::Resolver::SpecSpecification
# the executables.
def install(options = {})
require 'rubygems/installer'
require_relative '../installer'
installer = Gem::Installer.for_spec spec, options

View file

@ -77,11 +77,11 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
newest = found.last
unless @force
found_matching_metadata = found.select do |spec|
found_matching_metadata = found.reverse.find do |spec|
metadata_satisfied?(spec)
end
if found_matching_metadata.empty?
if found_matching_metadata.nil?
if newest
ensure_required_ruby_version_met(newest.spec)
ensure_required_rubygems_version_met(newest.spec)
@ -92,7 +92,7 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
raise exc
end
else
newest = found_matching_metadata.last
newest = found_matching_metadata
end
end

View file

@ -1,2 +1,2 @@
# frozen_string_literal: true
require 'rubygems/resolver/molinillo/lib/molinillo'
require_relative 'molinillo/lib/molinillo'

View file

@ -93,7 +93,7 @@ class Gem::Resolver::Specification
# specification.
def install(options = {})
require 'rubygems/installer'
require_relative '../installer'
gem = download options

View file

@ -5,7 +5,7 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems/exceptions'
require_relative 'exceptions'
require_relative 'openssl'
##
@ -592,9 +592,9 @@ module Gem::Security
end
if Gem::HAVE_OPENSSL
require 'rubygems/security/policy'
require 'rubygems/security/policies'
require 'rubygems/security/trust_dir'
require_relative 'security/policy'
require_relative 'security/policies'
require_relative 'security/trust_dir'
end
require 'rubygems/security/signer'
require_relative 'security/signer'

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/user_interaction'
require_relative '../user_interaction'
##
# A Gem::Security::Policy object encapsulates the settings for verifying

View file

@ -2,7 +2,7 @@
##
# Basic OpenSSL-based package signing class.
require "rubygems/user_interaction"
require_relative "../user_interaction"
class Gem::Security::Signer
include Gem::UserInteraction

View file

@ -5,7 +5,7 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems'
require_relative '../rubygems'
# forward-declare
@ -20,7 +20,7 @@ end
module Gem::SecurityOption
def add_security_option
OptionParser.accept Gem::Security::Policy do |value|
require 'rubygems/security'
require_relative 'security'
raise OptionParser::InvalidArgument, 'OpenSSL not installed' unless
defined?(Gem::Security::HighSecurity)

View file

@ -3,8 +3,8 @@ require 'zlib'
require 'erb'
require 'uri'
require 'rubygems'
require 'rubygems/rdoc'
require_relative '../rubygems'
require_relative 'rdoc'
##
# Gem::Server and allows users to serve gems for consumption by

View file

@ -238,9 +238,9 @@ class Gem::Source
end
end
require 'rubygems/source/git'
require 'rubygems/source/installed'
require 'rubygems/source/specific_file'
require 'rubygems/source/local'
require 'rubygems/source/lock'
require 'rubygems/source/vendor'
require_relative 'source/git'
require_relative 'source/installed'
require_relative 'source/specific_file'
require_relative 'source/local'
require_relative 'source/lock'
require_relative 'source/vendor'

View file

@ -1,9 +1,9 @@
# frozen_string_literal: true
require 'rubygems/remote_fetcher'
require 'rubygems/user_interaction'
require 'rubygems/errors'
require 'rubygems/text'
require 'rubygems/name_tuple'
require_relative 'remote_fetcher'
require_relative 'user_interaction'
require_relative 'errors'
require_relative 'text'
require_relative 'name_tuple'
##
# SpecFetcher handles metadata updates from remote gem repositories.

View file

@ -6,11 +6,11 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems/deprecate'
require 'rubygems/basic_specification'
require 'rubygems/stub_specification'
require 'rubygems/specification_policy'
require 'rubygems/util/list'
require_relative 'deprecate'
require_relative 'basic_specification'
require_relative 'stub_specification'
require_relative 'specification_policy'
require_relative 'util/list'
##
# The Specification class contains the information for a gem. Typically
@ -1568,9 +1568,9 @@ class Gem::Specification < Gem::BasicSpecification
unresolved_deps = Gem::Specification.unresolved_deps.dup
Gem::Specification.unresolved_deps.clear
require 'rubygems/config_file'
require 'rubygems/ext'
require 'rubygems/user_interaction'
require_relative 'config_file'
require_relative 'ext'
require_relative 'user_interaction'
ui = Gem::SilentUI.new
Gem::DefaultUserInteraction.use_ui ui do
@ -2525,7 +2525,7 @@ class Gem::Specification < Gem::BasicSpecification
# back, we have to check again here to make sure that our
# psych code was properly loaded, and load it if not.
unless Gem.const_defined?(:NoAliasYAMLTree)
require 'rubygems/psych_tree'
require_relative 'psych_tree'
end
builder = Gem::NoAliasYAMLTree.create

View file

@ -1,4 +1,4 @@
require 'rubygems/user_interaction'
require_relative 'user_interaction'
class Gem::SpecificationPolicy
include Gem::UserInteraction

View file

@ -6,11 +6,11 @@
#++
require 'fileutils'
require 'rubygems'
require 'rubygems/installer_uninstaller_utils'
require 'rubygems/dependency_list'
require 'rubygems/rdoc'
require 'rubygems/user_interaction'
require_relative '../rubygems'
require_relative 'installer_uninstaller_utils'
require_relative 'dependency_list'
require_relative 'rdoc'
require_relative 'user_interaction'
##
# An Uninstaller.
@ -357,7 +357,7 @@ class Gem::Uninstaller
# of what it did for us to find rather than trying to recreate
# it again.
if @format_executable
require 'rubygems/installer'
require_relative 'installer'
Gem::Installer.exec_format % File.basename(filename)
else
filename

102
lib/rubygems/uri.rb Normal file
View file

@ -0,0 +1,102 @@
# frozen_string_literal: true
##
# The Uri handles rubygems source URIs.
#
class Gem::Uri
def initialize(source_uri)
@parsed_uri = parse(source_uri)
end
def redacted
return self unless valid_uri?
if token? || oauth_basic?
with_redacted_user
elsif password?
with_redacted_password
else
self
end
end
def to_s
@parsed_uri.to_s
end
def redact_credentials_from(text)
return text unless valid_uri? && password?
text.sub(password, 'REDACTED')
end
def method_missing(method_name, *args, &blk)
if @parsed_uri.respond_to?(method_name)
@parsed_uri.send(method_name, *args, &blk)
else
super
end
end
def respond_to_missing?(method_name, include_private = false)
@parsed_uri.respond_to?(method_name, include_private) || super
end
private
##
# Parses the #uri, raising if it's invalid
def parse!(uri)
require "uri"
raise URI::InvalidURIError unless uri
# Always escape URI's to deal with potential spaces and such
# It should also be considered that source_uri may already be
# a valid URI with escaped characters. e.g. "{DESede}" is encoded
# as "%7BDESede%7D". If this is escaped again the percentage
# symbols will be escaped.
begin
URI.parse(uri)
rescue URI::InvalidURIError
URI.parse(URI::DEFAULT_PARSER.escape(uri))
end
end
##
# Parses the #uri, returning the original uri if it's invalid
def parse(uri)
return uri unless uri.is_a?(String)
parse!(uri)
rescue URI::InvalidURIError
uri
end
def with_redacted_user
clone.tap {|uri| uri.user = 'REDACTED' }
end
def with_redacted_password
clone.tap {|uri| uri.password = 'REDACTED' }
end
def valid_uri?
!@parsed_uri.is_a?(String)
end
def password?
!!password
end
def oauth_basic?
password == 'x-oauth-basic'
end
def token?
!user.nil? && password.nil?
end
end

View file

@ -1,34 +0,0 @@
# frozen_string_literal: true
##
# The UriParser handles parsing URIs.
#
class Gem::UriParser
##
# Parses the #uri, raising if it's invalid
def parse!(uri)
raise URI::InvalidURIError unless uri
# Always escape URI's to deal with potential spaces and such
# It should also be considered that source_uri may already be
# a valid URI with escaped characters. e.g. "{DESede}" is encoded
# as "%7BDESede%7D". If this is escaped again the percentage
# symbols will be escaped.
begin
URI.parse(uri)
rescue URI::InvalidURIError
URI.parse(URI::DEFAULT_PARSER.escape(uri))
end
end
##
# Parses the #uri, returning the original uri if it's invalid
def parse(uri)
parse!(uri)
rescue URI::InvalidURIError
uri
end
end

View file

@ -1,23 +0,0 @@
# frozen_string_literal: true
require "rubygems/uri_parser"
module Gem::UriParsing
def parse_uri(source_uri)
return source_uri unless source_uri.is_a?(String)
uri_parser.parse(source_uri)
end
private :parse_uri
def uri_parser
require "uri"
Gem::UriParser.new
end
private :uri_parser
end

View file

@ -5,8 +5,8 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems/deprecate'
require 'rubygems/text'
require_relative 'deprecate'
require_relative 'text'
##
# Module that defines the default UserInteraction. Any class including this

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require 'rubygems/text'
require_relative '../text'
class Gem::Licenses
extend Gem::Text

View file

@ -5,8 +5,8 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems/package'
require 'rubygems/installer'
require_relative 'package'
require_relative 'installer'
##
# Validator performs various gem file and gem database validation

View file

@ -5,7 +5,7 @@
# See LICENSE.txt for permissions.
#++
require 'rubygems'
require_relative '../rubygems'
##
# Mixin methods for --version and --platform Gem::Command options.

View file

@ -176,11 +176,9 @@ RSpec.describe Bundler do
describe "configuration" do
context "disable_shared_gems" do
it "should unset GEM_PATH with empty string" do
env = {}
expect(Bundler).to receive(:use_system_gems?).and_return(false)
Bundler.send(:configure_gem_path, env)
expect(env.keys).to include("GEM_PATH")
expect(env["GEM_PATH"]).to eq ""
Bundler.send(:configure_gem_path)
expect(ENV["GEM_PATH"]).to eq ""
end
end
end

View file

@ -126,6 +126,20 @@ RSpec.describe Bundler::Env do
end
end
context "when there's bundler config with OAuth token credentials" do
before do
bundle "config set https://localgemserver.test/ api_token:x-oauth-basic"
end
let(:output) { described_class.report(:print_gemfile => true) }
it "prints the config with redacted values" do
expect(output).to include("https://localgemserver.test")
expect(output).to include("[REDACTED]:x-oauth-basic")
expect(output).to_not include("api_token:x-oauth-basic")
end
end
context "when Gemfile contains a gemspec and print_gemspecs is true" do
let(:gemspec) do
strip_whitespace(<<-GEMSPEC)

Some files were not shown because too many files have changed in this diff Show more