diff options
Diffstat (limited to 'lib')
98 files changed, 462 insertions, 380 deletions
diff --git a/lib/bundler.rb b/lib/bundler.rb index 439c8cbb86..a7676cd497 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -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 diff --git a/lib/bundler/cli/check.rb b/lib/bundler/cli/check.rb index 4221fc7f2b..65c51337d2 100644 --- a/lib/bundler/cli/check.rb +++ b/lib/bundler/cli/check.rb @@ -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." diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index 673bf37698..4a27c438f5 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -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 diff --git a/lib/bundler/installer.rb b/lib/bundler/installer.rb index 2624ac4b18..63e02ba496 100644 --- a/lib/bundler/installer.rb +++ b/lib/bundler/installer.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require "rubygems/dependency_installer" require_relative "worker" require_relative "installer/parallel_installer" require_relative "installer/standalone" diff --git a/lib/bundler/plugin.rb b/lib/bundler/plugin.rb index bfe4fd7286..158c69e1a1 100644 --- a/lib/bundler/plugin.rb +++ b/lib/bundler/plugin.rb @@ -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. # diff --git a/lib/bundler/plugin/installer.rb b/lib/bundler/plugin/installer.rb index 54ce8528cf..d7411fff45 100644 --- a/lib/bundler/plugin/installer.rb +++ b/lib/bundler/plugin/installer.rb @@ -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 diff --git a/lib/bundler/rubygems_integration.rb b/lib/bundler/rubygems_integration.rb index 21ce12ecda..98982b0f07 100644 --- a/lib/bundler/rubygems_integration.rb +++ b/lib/bundler/rubygems_integration.rb @@ -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 diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb index abf7db21b4..1ced590b6f 100644 --- a/lib/bundler/settings.rb +++ b/lib/bundler/settings.rb @@ -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 diff --git a/lib/bundler/source.rb b/lib/bundler/source.rb index 7bf493d73d..434112ac8a 100644 --- a/lib/bundler/source.rb +++ b/lib/bundler/source.rb @@ -36,6 +36,8 @@ module Bundler def local!; end + def local_only!; end + def cached!; end def remote!; end diff --git a/lib/bundler/source/rubygems.rb b/lib/bundler/source/rubygems.rb index 298ff98e24..7f8699b91c 100644 --- a/lib/bundler/source/rubygems.rb +++ b/lib/bundler/source/rubygems.rb @@ -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 diff --git a/lib/bundler/source_list.rb b/lib/bundler/source_list.rb index b97206f497..d6310b78c0 100644 --- a/lib/bundler/source_list.rb +++ b/lib/bundler/source_list.rb @@ -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 diff --git a/lib/bundler/spec_set.rb b/lib/bundler/spec_set.rb index 7be4fcca87..26d41cb9b8 100644 --- a/lib/bundler/spec_set.rb +++ b/lib/bundler/spec_set.rb @@ -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 diff --git a/lib/bundler/templates/newgem/github/workflows/main.yml.tt b/lib/bundler/templates/newgem/github/workflows/main.yml.tt index 83ddea25dc..952cd649a2 100644 --- a/lib/bundler/templates/newgem/github/workflows/main.yml.tt +++ b/lib/bundler/templates/newgem/github/workflows/main.yml.tt @@ -2,7 +2,8 @@ name: Ruby on: push: - - <%= config[:git_default_branch] %> + branches: + - <%= config[:git_default_branch] %> pull_request: diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb index 510953c543..690d5a511c 100644 --- a/lib/bundler/version.rb +++ b/lib/bundler/version.rb @@ -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 diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 8f46264d93..4805debe6c 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -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' diff --git a/lib/rubygems/command_manager.rb b/lib/rubygems/command_manager.rb index 97e52544ca..3f4cd4bcfa 100644 --- a/lib/rubygems/command_manager.rb +++ b/lib/rubygems/command_manager.rb @@ -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 diff --git a/lib/rubygems/commands/build_command.rb b/lib/rubygems/commands/build_command.rb index 842ec1855a..6d1a057dfa 100644 --- a/lib/rubygems/commands/build_command.rb +++ b/lib/rubygems/commands/build_command.rb @@ -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 diff --git a/lib/rubygems/commands/cert_command.rb b/lib/rubygems/commands/cert_command.rb index 3fc0daea7d..bdfeb0ba6e 100644 --- a/lib/rubygems/commands/cert_command.rb +++ b/lib/rubygems/commands/cert_command.rb @@ -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 diff --git a/lib/rubygems/commands/check_command.rb b/lib/rubygems/commands/check_command.rb index 8b8eda53cf..3b6b97ae3b 100644 --- a/lib/rubygems/commands/check_command.rb +++ b/lib/rubygems/commands/check_command.rb @@ -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 diff --git a/lib/rubygems/commands/cleanup_command.rb b/lib/rubygems/commands/cleanup_command.rb index 662badce33..c965085880 100644 --- a/lib/rubygems/commands/cleanup_command.rb +++ b/lib/rubygems/commands/cleanup_command.rb @@ -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 diff --git a/lib/rubygems/commands/contents_command.rb b/lib/rubygems/commands/contents_command.rb index f17aed64db..716022c458 100644 --- a/lib/rubygems/commands/contents_command.rb +++ b/lib/rubygems/commands/contents_command.rb @@ -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 diff --git a/lib/rubygems/commands/dependency_command.rb b/lib/rubygems/commands/dependency_command.rb index e472d8fa8d..7d217076a5 100644 --- a/lib/rubygems/commands/dependency_command.rb +++ b/lib/rubygems/commands/dependency_command.rb @@ -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 diff --git a/lib/rubygems/commands/environment_command.rb b/lib/rubygems/commands/environment_command.rb index 37429fb836..b6eeb620bd 100644 --- a/lib/rubygems/commands/environment_command.rb +++ b/lib/rubygems/commands/environment_command.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'rubygems/command' +require_relative '../command' class Gem::Commands::EnvironmentCommand < Gem::Command def initialize diff --git a/lib/rubygems/commands/fetch_command.rb b/lib/rubygems/commands/fetch_command.rb index 6a1b346dd3..619f56a5da 100644 --- a/lib/rubygems/commands/fetch_command.rb +++ b/lib/rubygems/commands/fetch_command.rb @@ -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 diff --git a/lib/rubygems/commands/generate_index_command.rb b/lib/rubygems/commands/generate_index_command.rb index 93e25ef5e4..87200dab91 100644 --- a/lib/rubygems/commands/generate_index_command.rb +++ b/lib/rubygems/commands/generate_index_command.rb @@ -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. diff --git a/lib/rubygems/commands/help_command.rb b/lib/rubygems/commands/help_command.rb index 4e8d7600fb..7f3383c9f3 100644 --- a/lib/rubygems/commands/help_command.rb +++ b/lib/rubygems/commands/help_command.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'rubygems/command' +require_relative '../command' class Gem::Commands::HelpCommand < Gem::Command # :stopdoc: diff --git a/lib/rubygems/commands/info_command.rb b/lib/rubygems/commands/info_command.rb index 9ca6ae364f..3f2dd4ae0b 100644 --- a/lib/rubygems/commands/info_command.rb +++ b/lib/rubygems/commands/info_command.rb @@ -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 diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb index dcab60c142..7af5060129 100644 --- a/lib/rubygems/commands/install_command.rb +++ b/lib/rubygems/commands/install_command.rb @@ -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 diff --git a/lib/rubygems/commands/list_command.rb b/lib/rubygems/commands/list_command.rb index 5c99d3d73d..dea11111c9 100644 --- a/lib/rubygems/commands/list_command.rb +++ b/lib/rubygems/commands/list_command.rb @@ -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. diff --git a/lib/rubygems/commands/lock_command.rb b/lib/rubygems/commands/lock_command.rb index f1dc1ac586..cb6229a2cb 100644 --- a/lib/rubygems/commands/lock_command.rb +++ b/lib/rubygems/commands/lock_command.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'rubygems/command' +require_relative '../command' class Gem::Commands::LockCommand < Gem::Command def initialize diff --git a/lib/rubygems/commands/mirror_command.rb b/lib/rubygems/commands/mirror_command.rb index 86671a93b2..7daa47e2f0 100644 --- a/lib/rubygems/commands/mirror_command.rb +++ b/lib/rubygems/commands/mirror_command.rb @@ -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 diff --git a/lib/rubygems/commands/open_command.rb b/lib/rubygems/commands/open_command.rb index 8012a9a0e1..1e616fd68f 100644 --- a/lib/rubygems/commands/open_command.rb +++ b/lib/rubygems/commands/open_command.rb @@ -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 diff --git a/lib/rubygems/commands/outdated_command.rb b/lib/rubygems/commands/outdated_command.rb index 3579bfc3ba..162d338320 100644 --- a/lib/rubygems/commands/outdated_command.rb +++ b/lib/rubygems/commands/outdated_command.rb @@ -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 diff --git a/lib/rubygems/commands/owner_command.rb b/lib/rubygems/commands/owner_command.rb index dd49027469..0a5665228f 100644 --- a/lib/rubygems/commands/owner_command.rb +++ b/lib/rubygems/commands/owner_command.rb @@ -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 diff --git a/lib/rubygems/commands/pristine_command.rb b/lib/rubygems/commands/pristine_command.rb index 143105981e..41547ce73b 100644 --- a/lib/rubygems/commands/pristine_command.rb +++ b/lib/rubygems/commands/pristine_command.rb @@ -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..." diff --git a/lib/rubygems/commands/push_command.rb b/lib/rubygems/commands/push_command.rb index 1a9a1932f8..1864b4b095 100644 --- a/lib/rubygems/commands/push_command.rb +++ b/lib/rubygems/commands/push_command.rb @@ -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 diff --git a/lib/rubygems/commands/query_command.rb b/lib/rubygems/commands/query_command.rb index 789afd6509..5896bec44e 100644 --- a/lib/rubygems/commands/query_command.rb +++ b/lib/rubygems/commands/query_command.rb @@ -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 diff --git a/lib/rubygems/commands/rdoc_command.rb b/lib/rubygems/commands/rdoc_command.rb index e8c9e84b29..305c80ccfe 100644 --- a/lib/rubygems/commands/rdoc_command.rb +++ b/lib/rubygems/commands/rdoc_command.rb @@ -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 diff --git a/lib/rubygems/commands/search_command.rb b/lib/rubygems/commands/search_command.rb index aeb2119235..488d777939 100644 --- a/lib/rubygems/commands/search_command.rb +++ b/lib/rubygems/commands/search_command.rb @@ -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 diff --git a/lib/rubygems/commands/server_command.rb b/lib/rubygems/commands/server_command.rb index 594cf77f66..f3c08efb5e 100644 --- a/lib/rubygems/commands/server_command.rb +++ b/lib/rubygems/commands/server_command.rb @@ -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 diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb index 47e215c149..7ef0da4f36 100644 --- a/lib/rubygems/commands/setup_command.rb +++ b/lib/rubygems/commands/setup_command.rb @@ -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] diff --git a/lib/rubygems/commands/signin_command.rb b/lib/rubygems/commands/signin_command.rb index 2e19c8333c..23bb2f937f 100644 --- a/lib/rubygems/commands/signin_command.rb +++ b/lib/rubygems/commands/signin_command.rb @@ -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 diff --git a/lib/rubygems/commands/signout_command.rb b/lib/rubygems/commands/signout_command.rb index ebbe746cb4..c9485e0c1b 100644 --- a/lib/rubygems/commands/signout_command.rb +++ b/lib/rubygems/commands/signout_command.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'rubygems/command' +require_relative '../command' class Gem::Commands::SignoutCommand < Gem::Command def initialize diff --git a/lib/rubygems/commands/sources_command.rb b/lib/rubygems/commands/sources_command.rb index f74fb12e42..9e74f3c47d 100644 --- a/lib/rubygems/commands/sources_command.rb +++ b/lib/rubygems/commands/sources_command.rb @@ -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 diff --git a/lib/rubygems/commands/specification_command.rb b/lib/rubygems/commands/specification_command.rb index 3fddaaaf30..473b6e7b19 100644 --- a/lib/rubygems/commands/specification_command.rb +++ b/lib/rubygems/commands/specification_command.rb @@ -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 diff --git a/lib/rubygems/commands/stale_command.rb b/lib/rubygems/commands/stale_command.rb index badc9905c1..62a97966f1 100644 --- a/lib/rubygems/commands/stale_command.rb +++ b/lib/rubygems/commands/stale_command.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'rubygems/command' +require_relative '../command' class Gem::Commands::StaleCommand < Gem::Command def initialize diff --git a/lib/rubygems/commands/uninstall_command.rb b/lib/rubygems/commands/uninstall_command.rb index 1540b2f0fb..20781b224d 100644 --- a/lib/rubygems/commands/uninstall_command.rb +++ b/lib/rubygems/commands/uninstall_command.rb @@ -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' ## diff --git a/lib/rubygems/commands/unpack_command.rb b/lib/rubygems/commands/unpack_command.rb index 8d90d08eb4..3f1708375f 100644 --- a/lib/rubygems/commands/unpack_command.rb +++ b/lib/rubygems/commands/unpack_command.rb @@ -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 diff --git a/lib/rubygems/commands/update_command.rb b/lib/rubygems/commands/update_command.rb index 8d168d1cbd..9148e5e26a 100644 --- a/lib/rubygems/commands/update_command.rb +++ b/lib/rubygems/commands/update_command.rb @@ -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 diff --git a/lib/rubygems/commands/which_command.rb b/lib/rubygems/commands/which_command.rb index d42ab18395..44e87a2b98 100644 --- a/lib/rubygems/commands/which_command.rb +++ b/lib/rubygems/commands/which_command.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'rubygems/command' +require_relative '../command' class Gem::Commands::WhichCommand < Gem::Command def initialize diff --git a/lib/rubygems/commands/yank_command.rb b/lib/rubygems/commands/yank_command.rb index a7930253d6..cad78aec5f 100644 --- a/lib/rubygems/commands/yank_command.rb +++ b/lib/rubygems/commands/yank_command.rb @@ -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 diff --git a/lib/rubygems/config_file.rb b/lib/rubygems/config_file.rb index 02bb2be122..60c1d50ba9 100644 --- a/lib/rubygems/config_file.rb +++ b/lib/rubygems/config_file.rb @@ -5,7 +5,7 @@ # See LICENSE.txt for permissions. #++ -require 'rubygems/user_interaction' +require_relative 'user_interaction' require 'rbconfig' ## diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb index 400a5de5cf..913bba32eb 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb @@ -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. diff --git a/lib/rubygems/dependency_list.rb b/lib/rubygems/dependency_list.rb index bcf436cd03..8f61869874 100644 --- a/lib/rubygems/dependency_list.rb +++ b/lib/rubygems/dependency_list.rb @@ -6,7 +6,7 @@ #++ require 'tsort' -require 'rubygems/deprecate' +require_relative 'deprecate' ## # Gem::DependencyList is used for installing and uninstalling gems in the diff --git a/lib/rubygems/doctor.rb b/lib/rubygems/doctor.rb index ef31aeddd0..41bcda9804 100644 --- a/lib/rubygems/doctor.rb +++ b/lib/rubygems/doctor.rb @@ -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 diff --git a/lib/rubygems/exceptions.rb b/lib/rubygems/exceptions.rb index 804863f693..ca485de30e 100644 --- a/lib/rubygems/exceptions.rb +++ b/lib/rubygems/exceptions.rb @@ -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 diff --git a/lib/rubygems/gem_runner.rb b/lib/rubygems/gem_runner.rb index a36674503e..55b5a7d067 100644 --- a/lib/rubygems/gem_runner.rb +++ b/lib/rubygems/gem_runner.rb @@ -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 diff --git a/lib/rubygems/gemcutter_utilities.rb b/lib/rubygems/gemcutter_utilities.rb index f465881041..0968e1a6f9 100644 --- a/lib/rubygems/gemcutter_utilities.rb +++ b/lib/rubygems/gemcutter_utilities.rb @@ -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. diff --git a/lib/rubygems/indexer.rb b/lib/rubygems/indexer.rb index e595459c87..6e8dade640 100644 --- a/lib/rubygems/indexer.rb +++ b/lib/rubygems/indexer.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'rubygems' -require 'rubygems/package' +require_relative '../rubygems' +require_relative 'package' require 'tmpdir' ## diff --git a/lib/rubygems/install_default_message.rb b/lib/rubygems/install_default_message.rb index f68fd2fd04..052ef528e1 100644 --- a/lib/rubygems/install_default_message.rb +++ b/lib/rubygems/install_default_message.rb @@ -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 diff --git a/lib/rubygems/install_message.rb b/lib/rubygems/install_message.rb index 3c13888a84..861ead3770 100644 --- a/lib/rubygems/install_message.rb +++ b/lib/rubygems/install_message.rb @@ -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 diff --git a/lib/rubygems/install_update_options.rb b/lib/rubygems/install_update_options.rb index ef1ad1edcb..f4063c1bad 100644 --- a/lib/rubygems/install_update_options.rb +++ b/lib/rubygems/install_update_options.rb @@ -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 diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 53c5fc7285..26ebfaa846 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -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. diff --git a/lib/rubygems/local_remote_options.rb b/lib/rubygems/local_remote_options.rb index 2d0509eb03..8acd98d2e4 100644 --- a/lib/rubygems/local_remote_options.rb +++ b/lib/rubygems/local_remote_options.rb @@ -6,7 +6,7 @@ #++ require 'uri' -require 'rubygems' +require_relative '../rubygems' ## # Mixin methods for local and remote Gem::Command options. diff --git a/lib/rubygems/mock_gem_ui.rb b/lib/rubygems/mock_gem_ui.rb index ec244fb7c6..914ecb9a71 100644 --- a/lib/rubygems/mock_gem_ui.rb +++ b/lib/rubygems/mock_gem_ui.rb @@ -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 diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb index a4ae3e9ea5..c4b29e4176 100644 --- a/lib/rubygems/package.rb +++ b/lib/rubygems/package.rb @@ -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' diff --git a/lib/rubygems/package/tar_reader.rb b/lib/rubygems/package/tar_reader.rb index e7c5620533..41121f3bfb 100644 --- a/lib/rubygems/package/tar_reader.rb +++ b/lib/rubygems/package/tar_reader.rb @@ -121,4 +121,4 @@ class Gem::Package::TarReader end end -require 'rubygems/package/tar_reader/entry' +require_relative 'tar_reader/entry' diff --git a/lib/rubygems/package_task.rb b/lib/rubygems/package_task.rb index d5a2885a64..bb48616b0e 100644 --- a/lib/rubygems/package_task.rb +++ b/lib/rubygems/package_task.rb @@ -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' ## diff --git a/lib/rubygems/platform.rb b/lib/rubygems/platform.rb index fd1c0a62ac..9750df181b 100644 --- a/lib/rubygems/platform.rb +++ b/lib/rubygems/platform.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require "rubygems/deprecate" +require_relative "deprecate" ## # Available list of platforms for targeting Gem installations. diff --git a/lib/rubygems/rdoc.rb b/lib/rubygems/rdoc.rb index c40bb7d9f1..ac5e8f0822 100644 --- a/lib/rubygems/rdoc.rb +++ b/lib/rubygems/rdoc.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'rubygems' +require_relative '../rubygems' begin require 'rdoc/rubygems_hook' diff --git a/lib/rubygems/remote_fetcher.rb b/lib/rubygems/remote_fetcher.rb index 7c2db12dc1..22ad89b970 100644 --- a/lib/rubygems/remote_fetcher.rb +++ b/lib/rubygems/remote_fetcher.rb @@ -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 = parse_uri(uri) - - @original_uri = uri.dup + uri = Gem::Uri.new(uri) - uri.password = 'REDACTED' if uri.respond_to?(:password) && uri.password + super uri.redact_credentials_from(message) - @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}" diff --git a/lib/rubygems/request.rb b/lib/rubygems/request.rb index 5bda0b2e5e..72e25e20ab 100644 --- a/lib/rubygems/request.rb +++ b/lib/rubygems/request.rb @@ -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' diff --git a/lib/rubygems/request_set.rb b/lib/rubygems/request_set.rb index 5190cfc904..cff960708c 100644 --- a/lib/rubygems/request_set.rb +++ b/lib/rubygems/request_set.rb @@ -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' diff --git a/lib/rubygems/request_set/lockfile.rb b/lib/rubygems/request_set/lockfile.rb index 8f8f142fff..bec29ef1b9 100644 --- a/lib/rubygems/request_set/lockfile.rb +++ b/lib/rubygems/request_set/lockfile.rb @@ -236,4 +236,4 @@ class Gem::RequestSet::Lockfile end end -require 'rubygems/request_set/lockfile/tokenizer' +require_relative 'lockfile/tokenizer' diff --git a/lib/rubygems/request_set/lockfile/tokenizer.rb b/lib/rubygems/request_set/lockfile/tokenizer.rb index 6918e8e1a5..cb8030c143 100644 --- a/lib/rubygems/request_set/lockfile/tokenizer.rb +++ b/lib/rubygems/request_set/lockfile/tokenizer.rb @@ -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 diff --git a/lib/rubygems/requirement.rb b/lib/rubygems/requirement.rb index 16de45ad91..d2e28fab5b 100644 --- a/lib/rubygems/requirement.rb +++ b/lib/rubygems/requirement.rb @@ -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 diff --git a/lib/rubygems/resolver.rb b/lib/rubygems/resolver.rb index 71c35ea3d3..51a11fed47 100644 --- a/lib/rubygems/resolver.rb +++ b/lib/rubygems/resolver.rb @@ -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 '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 '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/activation_request' +require_relative 'resolver/conflict' +require_relative 'resolver/dependency_request' +require_relative 'resolver/requirement_list' +require_relative 'resolver/stats' + +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_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' diff --git a/lib/rubygems/resolver/git_specification.rb b/lib/rubygems/resolver/git_specification.rb index 555dcffc22..ee47080ab4 100644 --- a/lib/rubygems/resolver/git_specification.rb +++ b/lib/rubygems/resolver/git_specification.rb @@ -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 diff --git a/lib/rubygems/resolver/installer_set.rb b/lib/rubygems/resolver/installer_set.rb index 60181315b0..f4fee351a5 100644 --- a/lib/rubygems/resolver/installer_set.rb +++ b/lib/rubygems/resolver/installer_set.rb @@ -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 diff --git a/lib/rubygems/resolver/molinillo.rb b/lib/rubygems/resolver/molinillo.rb index 2357f41bee..12ca740e5a 100644 --- a/lib/rubygems/resolver/molinillo.rb +++ b/lib/rubygems/resolver/molinillo.rb @@ -1,2 +1,2 @@ # frozen_string_literal: true -require 'rubygems/resolver/molinillo/lib/molinillo' +require_relative 'molinillo/lib/molinillo' diff --git a/lib/rubygems/resolver/specification.rb b/lib/rubygems/resolver/specification.rb index 8c6fc9afcf..dfcb7eb057 100644 --- a/lib/rubygems/resolver/specification.rb +++ b/lib/rubygems/resolver/specification.rb @@ -93,7 +93,7 @@ class Gem::Resolver::Specification # specification. def install(options = {}) - require 'rubygems/installer' + require_relative '../installer' gem = download options diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb index c80639af6d..28f705549c 100644 --- a/lib/rubygems/security.rb +++ b/lib/rubygems/security.rb @@ -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' diff --git a/lib/rubygems/security/policy.rb b/lib/rubygems/security/policy.rb index 7629d64796..9683e55b32 100644 --- a/lib/rubygems/security/policy.rb +++ b/lib/rubygems/security/policy.rb @@ -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 diff --git a/lib/rubygems/security/signer.rb b/lib/rubygems/security/signer.rb index 6c85ab08d2..c5c2c4f220 100644 --- a/lib/rubygems/security/signer.rb +++ b/lib/rubygems/security/signer.rb @@ -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 diff --git a/lib/rubygems/security_option.rb b/lib/rubygems/security_option.rb index 3403aaaf05..6c75d6ecb4 100644 --- a/lib/rubygems/security_option.rb +++ b/lib/rubygems/security_option.rb @@ -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) diff --git a/lib/rubygems/server.rb b/lib/rubygems/server.rb index 2c2805f31c..45be05bcda 100644 --- a/lib/rubygems/server.rb +++ b/lib/rubygems/server.rb @@ -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 diff --git a/lib/rubygems/source.rb b/lib/rubygems/source.rb index 4ae84cf532..816385d139 100644 --- a/lib/rubygems/source.rb +++ b/lib/rubygems/source.rb @@ -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' diff --git a/lib/rubygems/spec_fetcher.rb b/lib/rubygems/spec_fetcher.rb index b2bcadc49c..68ff605a83 100644 --- a/lib/rubygems/spec_fetcher.rb +++ b/lib/rubygems/spec_fetcher.rb @@ -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. diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index ae16dce885..e31ac8ede5 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -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 diff --git a/lib/rubygems/specification_policy.rb b/lib/rubygems/specification_policy.rb index 86277a2058..1f1f73b11f 100644 --- a/lib/rubygems/specification_policy.rb +++ b/lib/rubygems/specification_policy.rb @@ -1,4 +1,4 @@ -require 'rubygems/user_interaction' +require_relative 'user_interaction' class Gem::SpecificationPolicy include Gem::UserInteraction diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb index 93e414b1c9..1c3bf260c2 100644 --- a/lib/rubygems/uninstaller.rb +++ b/lib/rubygems/uninstaller.rb @@ -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 diff --git a/lib/rubygems/uri.rb b/lib/rubygems/uri.rb new file mode 100644 index 0000000000..031d7e01c3 --- /dev/null +++ b/lib/rubygems/uri.rb @@ -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 diff --git a/lib/rubygems/uri_parser.rb b/lib/rubygems/uri_parser.rb deleted file mode 100644 index f350edec8c..0000000000 --- a/lib/rubygems/uri_parser.rb +++ /dev/null @@ -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 diff --git a/lib/rubygems/uri_parsing.rb b/lib/rubygems/uri_parsing.rb deleted file mode 100644 index 941d7e023a..0000000000 --- a/lib/rubygems/uri_parsing.rb +++ /dev/null @@ -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 diff --git a/lib/rubygems/user_interaction.rb b/lib/rubygems/user_interaction.rb index 27a9957117..61d50a9ff8 100644 --- a/lib/rubygems/user_interaction.rb +++ b/lib/rubygems/user_interaction.rb @@ -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 diff --git a/lib/rubygems/util/licenses.rb b/lib/rubygems/util/licenses.rb index 98cbd8929b..8de5b11ae3 100644 --- a/lib/rubygems/util/licenses.rb +++ b/lib/rubygems/util/licenses.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'rubygems/text' +require_relative '../text' class Gem::Licenses extend Gem::Text diff --git a/lib/rubygems/validator.rb b/lib/rubygems/validator.rb index 30cdd93b5c..728595e778 100644 --- a/lib/rubygems/validator.rb +++ b/lib/rubygems/validator.rb @@ -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 diff --git a/lib/rubygems/version_option.rb b/lib/rubygems/version_option.rb index be71ef409b..eabe4fdb57 100644 --- a/lib/rubygems/version_option.rb +++ b/lib/rubygems/version_option.rb @@ -5,7 +5,7 @@ # See LICENSE.txt for permissions. #++ -require 'rubygems' +require_relative '../rubygems' ## # Mixin methods for --version and --platform Gem::Command options. |