diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2021-08-18 19:37:11 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2021-08-19 15:46:40 +0900 |
commit | 37f824377fce1bb0fb3ae94f858e2b9417b67b56 (patch) | |
tree | 262faa7f44212747afc4b694b0c67165d3f288ca /lib | |
parent | 41a28637807bef9b15c404c93a778aaa6266ace7 (diff) |
Merge RubyGems 3.2.26 and Bundler 2.2.26
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bundler/cli.rb | 14 | ||||
-rw-r--r-- | lib/bundler/cli/check.rb | 2 | ||||
-rw-r--r-- | lib/bundler/cli/exec.rb | 7 | ||||
-rw-r--r-- | lib/bundler/cli/gem.rb | 5 | ||||
-rw-r--r-- | lib/bundler/definition.rb | 8 | ||||
-rw-r--r-- | lib/bundler/dsl.rb | 2 | ||||
-rw-r--r-- | lib/bundler/errors.rb | 2 | ||||
-rw-r--r-- | lib/bundler/installer/standalone.rb | 21 | ||||
-rw-r--r-- | lib/bundler/resolver.rb | 27 | ||||
-rw-r--r-- | lib/bundler/settings.rb | 2 | ||||
-rw-r--r-- | lib/bundler/source.rb | 6 | ||||
-rw-r--r-- | lib/bundler/source/rubygems.rb | 24 | ||||
-rw-r--r-- | lib/bundler/source/rubygems_aggregate.rb | 4 | ||||
-rw-r--r-- | lib/bundler/source_list.rb | 4 | ||||
-rw-r--r-- | lib/bundler/templates/newgem/github/workflows/main.yml.tt | 14 | ||||
-rw-r--r-- | lib/bundler/templates/newgem/newgem.gemspec.tt | 4 | ||||
-rw-r--r-- | lib/bundler/version.rb | 2 | ||||
-rw-r--r-- | lib/rubygems.rb | 46 | ||||
-rw-r--r-- | lib/rubygems/installer.rb | 11 |
19 files changed, 112 insertions, 93 deletions
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb index f054a2bfed..294b07d555 100644 --- a/lib/bundler/cli.rb +++ b/lib/bundler/cli.rb @@ -73,14 +73,6 @@ module Bundler Bundler.ui = UI::Shell.new(options) Bundler.ui.level = "debug" if options["verbose"] unprinted_warnings.each {|w| Bundler.ui.warn(w) } - - if ENV["RUBYGEMS_GEMDEPS"] && !ENV["RUBYGEMS_GEMDEPS"].empty? - Bundler.ui.warn( - "The RUBYGEMS_GEMDEPS environment variable is set. This enables RubyGems' " \ - "experimental Gemfile mode, which may conflict with Bundler and cause unexpected errors. " \ - "To remove this warning, unset RUBYGEMS_GEMDEPS.", :wrap => true - ) - end end check_unknown_options!(:except => [:config, :exec]) @@ -469,7 +461,7 @@ module Bundler map aliases_for("cache") desc "exec [OPTIONS]", "Run the command in context of the bundle" - method_option :keep_file_descriptors, :type => :boolean, :default => false + method_option :keep_file_descriptors, :type => :boolean, :default => true method_option :gemfile, :type => :string, :required => false long_desc <<-D Exec runs a command, providing it access to the gems in the bundle. While using @@ -477,6 +469,10 @@ module Bundler into the system wide RubyGems repository. D def exec(*args) + if ARGV.include?("--no-keep-file-descriptors") + SharedHelpers.major_deprecation(2, "The `--no-keep-file-descriptors` has been deprecated. `bundle exec` no longer mess with your file descriptors. Close them in the exec'd script if you need to") + end + require_relative "cli/exec" Exec.new(options, args).run end diff --git a/lib/bundler/cli/check.rb b/lib/bundler/cli/check.rb index 65c51337d2..4221fc7f2b 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_only_locally! + definition.resolve_with_cache! not_installed = definition.missing_specs rescue GemNotFound, VersionConflict Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies." diff --git a/lib/bundler/cli/exec.rb b/lib/bundler/cli/exec.rb index 318d57fb06..42b602a055 100644 --- a/lib/bundler/cli/exec.rb +++ b/lib/bundler/cli/exec.rb @@ -12,12 +12,7 @@ module Bundler @options = options @cmd = args.shift @args = args - - if !Bundler.current_ruby.jruby? - @args << { :close_others => !options.keep_file_descriptors? } - elsif options.keep_file_descriptors? - Bundler.ui.warn "Ruby version #{RUBY_VERSION} defaults to keeping non-standard file descriptors on Kernel#exec." - end + @args << { :close_others => !options.keep_file_descriptors? } unless Bundler.current_ruby.jruby? end def run diff --git a/lib/bundler/cli/gem.rb b/lib/bundler/cli/gem.rb index eb1119859c..b3bb025b89 100644 --- a/lib/bundler/cli/gem.rb +++ b/lib/bundler/cli/gem.rb @@ -184,14 +184,15 @@ module Bundler ) end - if File.exist?(target) && !File.directory?(target) + if target.exist? && !target.directory? Bundler.ui.error "Couldn't create a new gem named `#{gem_name}` because there's an existing file named `#{gem_name}`." exit Bundler::BundlerError.all_errors[Bundler::GenericSystemCallError] end if use_git Bundler.ui.info "Initializing git repo in #{target}" - `git init #{target}` + require "shellwords" + `git init #{target.to_s.shellescape}` config[:git_default_branch] = File.read("#{target}/.git/HEAD").split("/").last.chomp end diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index f987d85f5b..673bf37698 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -161,12 +161,6 @@ module Bundler @multisource_allowed end - def resolve_only_locally! - @remote = false - sources.local_only! - resolve - end - def resolve_with_cache! sources.cached! resolve @@ -505,7 +499,7 @@ module Bundler end def precompute_source_requirements_for_indirect_dependencies? - sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source? + @remote && sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source? end def current_ruby_platform_locked? diff --git a/lib/bundler/dsl.rb b/lib/bundler/dsl.rb index 3517a109ed..ed7b3e2d6b 100644 --- a/lib/bundler/dsl.rb +++ b/lib/bundler/dsl.rb @@ -457,7 +457,7 @@ repo_name ||= user_name def implicit_global_source_warning Bundler::SharedHelpers.major_deprecation 2, "This Gemfile does not include an explicit global source. " \ "Not using an explicit global source may result in a different lockfile being generated depending on " \ - "the gems you have installed locally before bundler is run." \ + "the gems you have installed locally before bundler is run. " \ "Instead, define a global source in your Gemfile like this: source \"https://rubygems.org\"." end diff --git a/lib/bundler/errors.rb b/lib/bundler/errors.rb index 11763b4e88..565aaeeb9d 100644 --- a/lib/bundler/errors.rb +++ b/lib/bundler/errors.rb @@ -122,7 +122,7 @@ module Bundler class VirtualProtocolError < BundlerError def message - "There was an error relating to virtualization and file access." \ + "There was an error relating to virtualization and file access. " \ "It is likely that you need to grant access to or mount some file system correctly." end diff --git a/lib/bundler/installer/standalone.rb b/lib/bundler/installer/standalone.rb index f16135cb48..e8494b4bcd 100644 --- a/lib/bundler/installer/standalone.rb +++ b/lib/bundler/installer/standalone.rb @@ -12,12 +12,13 @@ module Bundler end File.open File.join(bundler_path, "setup.rb"), "w" do |file| file.puts "require 'rbconfig'" - file.puts "ruby_engine = RUBY_ENGINE" - file.puts "ruby_version = RbConfig::CONFIG[\"ruby_version\"]" - file.puts "path = File.expand_path('..', __FILE__)" file.puts reverse_rubygems_kernel_mixin paths.each do |path| - file.puts %($:.unshift File.expand_path("\#{path}/#{path}")) + if Pathname.new(path).absolute? + file.puts %($:.unshift "#{path}") + else + file.puts %($:.unshift File.expand_path("\#{__dir__}/#{path}")) + end end end end @@ -28,14 +29,14 @@ module Bundler @specs.map do |spec| next if spec.name == "bundler" Array(spec.require_paths).map do |path| - gem_path(path, spec).sub(version_dir, '#{ruby_engine}/#{ruby_version}') + gem_path(path, spec).sub(version_dir, '#{RUBY_ENGINE}/#{RbConfig::CONFIG["ruby_version"]}') # This is a static string intentionally. It's interpolated at a later time. end - end.flatten + end.flatten.compact end def version_dir - "#{Bundler::RubyVersion.system.engine}/#{RbConfig::CONFIG["ruby_version"]}" + "#{RUBY_ENGINE}/#{RbConfig::CONFIG["ruby_version"]}" end def bundler_path @@ -44,7 +45,11 @@ module Bundler def gem_path(path, spec) full_path = Pathname.new(path).absolute? ? path : File.join(spec.full_gem_path, path) - Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)).to_s + if spec.source.instance_of?(Source::Path) + full_path + else + Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)).to_s + end rescue TypeError error_message = "#{spec.name} #{spec.version} has an invalid gemspec" raise Gem::InvalidSpecificationException.new(error_message) diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index a78b2db157..d26e2feb10 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -255,12 +255,6 @@ module Bundler next if name == "bundler" next unless search_for(requirement).empty? - cache_message = begin - " or in gems cached in #{Bundler.settings.app_cache_path}" if Bundler.app_cache.exist? - rescue GemfileNotFound - nil - end - if (base = @base[name]) && !base.empty? version = base.first.version message = "You have requested:\n" \ @@ -269,18 +263,17 @@ module Bundler "Try running `bundle update #{name}`\n\n" \ "If you are updating multiple gems in your Gemfile at once,\n" \ "try passing them all to `bundle update`" - elsif source = @source_requirements[name] + else + source = source_for(name) specs = source.specs.search(name) versions_with_platforms = specs.map {|s| [s.version, s.platform] } - message = String.new("Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in #{source}#{cache_message}.\n") - message << if versions_with_platforms.any? - "The source contains the following versions of '#{name}': #{formatted_versions_with_platforms(versions_with_platforms)}" - else - "The source does not contain any versions of '#{name}'" - end - else - message = "Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in any of the gem sources " \ - "listed in your Gemfile#{cache_message}." + cache_message = begin + " or in gems cached in #{Bundler.settings.app_cache_path}" if Bundler.app_cache.exist? + rescue GemfileNotFound + nil + end + message = String.new("Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in #{source.to_err}#{cache_message}.\n") + message << "The source contains the following versions of '#{name}': #{formatted_versions_with_platforms(versions_with_platforms)}" if versions_with_platforms.any? end raise GemNotFound, message end @@ -378,7 +371,7 @@ module Bundler o << if metadata_requirement "is not available in #{relevant_source}" else - "in #{relevant_source}.\n" + "in #{relevant_source.to_err}.\n" end end end, diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb index 03126f616c..abf7db21b4 100644 --- a/lib/bundler/settings.rb +++ b/lib/bundler/settings.rb @@ -430,6 +430,8 @@ module Bundler Pathname.new(ENV["BUNDLE_CONFIG"]) elsif ENV["BUNDLE_USER_CONFIG"] && !ENV["BUNDLE_USER_CONFIG"].empty? Pathname.new(ENV["BUNDLE_USER_CONFIG"]) + elsif ENV["BUNDLE_USER_HOME"] && !ENV["BUNDLE_USER_HOME"].empty? + Pathname.new(ENV["BUNDLE_USER_HOME"]).join("config") elsif Bundler.rubygems.user_home && !Bundler.rubygems.user_home.empty? Pathname.new(Bundler.rubygems.user_home).join(".bundle/config") end diff --git a/lib/bundler/source.rb b/lib/bundler/source.rb index 5388a7681e..7bf493d73d 100644 --- a/lib/bundler/source.rb +++ b/lib/bundler/source.rb @@ -36,8 +36,6 @@ module Bundler def local!; end - def local_only!; end - def cached!; end def remote!; end @@ -67,6 +65,10 @@ module Bundler "#<#{self.class}:0x#{object_id} #{self}>" end + def to_err + to_s + end + def path? instance_of?(Bundler::Source::Path) end diff --git a/lib/bundler/source/rubygems.rb b/lib/bundler/source/rubygems.rb index 858a69a48b..298ff98e24 100644 --- a/lib/bundler/source/rubygems.rb +++ b/lib/bundler/source/rubygems.rb @@ -26,12 +26,6 @@ module Bundler Array(options["remotes"]).reverse_each {|r| add_remote(r) } end - def local_only! - @specs = nil - @allow_local = true - @allow_remote = false - end - def local! return if @allow_local @@ -50,6 +44,7 @@ module Bundler return if @allow_cached @specs = nil + @allow_local = true @allow_cached = true end @@ -96,11 +91,22 @@ module Bundler out << " specs:\n" end + def to_err + if remotes.empty? + "locally installed gems" + elsif @allow_remote + "rubygems repository #{remote_names} or installed locally" + elsif @allow_cached + "cached gems from rubygems repository #{remote_names} or installed locally" + else + "locally installed gems" + end + end + def to_s if remotes.empty? "locally installed gems" else - remote_names = remotes.map(&:to_s).join(", ") "rubygems repository #{remote_names} or installed locally" end end @@ -319,6 +325,10 @@ module Bundler protected + def remote_names + remotes.map(&:to_s).join(", ") + end + def credless_remotes remotes.map(&method(:suppress_configured_credentials)) end diff --git a/lib/bundler/source/rubygems_aggregate.rb b/lib/bundler/source/rubygems_aggregate.rb index 685bf7e90a..09cf4002ea 100644 --- a/lib/bundler/source/rubygems_aggregate.rb +++ b/lib/bundler/source/rubygems_aggregate.rb @@ -16,6 +16,10 @@ module Bundler @index end + def to_err + to_s + end + def to_s "any of the sources" end diff --git a/lib/bundler/source_list.rb b/lib/bundler/source_list.rb index d6310b78c0..b97206f497 100644 --- a/lib/bundler/source_list.rb +++ b/lib/bundler/source_list.rb @@ -136,10 +136,6 @@ 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/templates/newgem/github/workflows/main.yml.tt b/lib/bundler/templates/newgem/github/workflows/main.yml.tt index 654978033f..83ddea25dc 100644 --- a/lib/bundler/templates/newgem/github/workflows/main.yml.tt +++ b/lib/bundler/templates/newgem/github/workflows/main.yml.tt @@ -1,16 +1,26 @@ name: Ruby -on: [push,pull_request] +on: + push: + - <%= config[:git_default_branch] %> + + pull_request: jobs: build: runs-on: ubuntu-latest + + strategy: + matrix: + ruby: + - <%= RUBY_VERSION %> + steps: - uses: actions/checkout@v2 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: <%= RUBY_VERSION %> + ruby-version: ${{ matrix.ruby }} bundler-cache: true - name: Run the default task run: bundle exec rake diff --git a/lib/bundler/templates/newgem/newgem.gemspec.tt b/lib/bundler/templates/newgem/newgem.gemspec.tt index 91ce856bff..271d39dec5 100644 --- a/lib/bundler/templates/newgem/newgem.gemspec.tt +++ b/lib/bundler/templates/newgem/newgem.gemspec.tt @@ -25,7 +25,9 @@ Gem::Specification.new do |spec| # Specify which files should be added to the gem when it is released. # The `git ls-files -z` loads the files in the RubyGem that have been added into git. spec.files = Dir.chdir(File.expand_path(__dir__)) do - `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) } + `git ls-files -z`.split("\x0").reject do |f| + (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)}) + end end spec.bindir = "exe" spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) } diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb index 4447aa401e..510953c543 100644 --- a/lib/bundler/version.rb +++ b/lib/bundler/version.rb @@ -1,7 +1,7 @@ # frozen_string_literal: false module Bundler - VERSION = "2.2.25".freeze + VERSION = "2.2.26".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 900f98542e..8f46264d93 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -8,7 +8,7 @@ require 'rbconfig' module Gem - VERSION = "3.2.25".freeze + VERSION = "3.2.26".freeze end # Must be first since it unloads the prelude from 1.9.2 @@ -249,9 +249,6 @@ module Gem # you to specify specific gem versions. def self.bin_path(name, exec_name = nil, *requirements) - # TODO: fails test_self_bin_path_bin_file_gone_in_latest - # Gem::Specification.find_by_name(name, *requirements).bin_file exec_name - requirements = Gem::Requirement.default if requirements.empty? @@ -1053,7 +1050,9 @@ An Array (#{env.inspect}) was passed in from #{caller[3]} # Find rubygems plugin files in the standard location and load them def self.load_plugins - load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir) + Gem.path.each do |gem_path| + load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir(gem_path)) + end end ## @@ -1112,26 +1111,21 @@ An Array (#{env.inspect}) was passed in from #{caller[3]} ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path) require 'rubygems/user_interaction' - Gem::DefaultUserInteraction.use_ui(ui) do - require "bundler" - begin - Bundler.ui.silence do - @gemdeps = Bundler.setup + require "bundler" + begin + Gem::DefaultUserInteraction.use_ui(ui) do + begin + Bundler.ui.silence do + @gemdeps = Bundler.setup + end + ensure + Gem::DefaultUserInteraction.ui.close end - ensure - Gem::DefaultUserInteraction.ui.close end - @gemdeps.requested_specs.map(&:to_spec).sort_by(&:name) - end - - rescue => e - case e - when Gem::LoadError, Gem::UnsatisfiableDependencyError, (defined?(Bundler::GemNotFound) ? Bundler::GemNotFound : Gem::LoadError) + rescue Bundler::BundlerError => e warn e.message - warn "You may need to `gem install -g` to install missing gems" + warn "You may need to `bundle install` to install missing gems" warn "" - else - raise end end @@ -1337,6 +1331,14 @@ begin require 'rubygems/defaults/operating_system' rescue LoadError + # Ignored +rescue StandardError => e + msg = "#{e.message}\n" \ + "Loading the rubygems/defaults/operating_system.rb file caused an error. " \ + "This file is owned by your OS, not by rubygems upstream. " \ + "Please find out which OS package this file belongs to and follow the guidelines from your OS to report " \ + "the problem and ask for help." + raise e.class, msg end begin @@ -1354,5 +1356,3 @@ Gem::Specification.load_defaults require 'rubygems/core_ext/kernel_gem' require 'rubygems/core_ext/kernel_require' require 'rubygems/core_ext/kernel_warn' - -Gem.use_gemdeps diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 8c286605e1..53c5fc7285 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -761,7 +761,7 @@ class Gem::Installer # require 'rubygems' - +#{gemdeps_load(spec.name)} version = "#{Gem::Requirement.default_prerelease}" str = ARGV.first @@ -782,6 +782,15 @@ end TEXT end + def gemdeps_load(name) + return '' if name == "bundler" + + <<-TEXT + +Gem.use_gemdeps +TEXT + end + ## # return the stub script text used to launch the true Ruby script |