ruby-changes:65632
From: Hiroshi <ko1@a...>
Date: Wed, 24 Mar 2021 04:52:41 +0900 (JST)
Subject: [ruby-changes:65632] 2efda212b0 (ruby_3_0): Merge RubyGems-3.2.15 and Bundler-2.2.15 (#4311)
https://git.ruby-lang.org/ruby.git/commit/?id=2efda212b0 From 2efda212b0d9ad5ec265271db25ad51d796fde44 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA <hsbt@r...> Date: Wed, 24 Mar 2021 04:52:19 +0900 Subject: Merge RubyGems-3.2.15 and Bundler-2.2.15 (#4311) --- lib/bundler/installer/parallel_installer.rb | 37 +++++++++++++++++---- lib/bundler/lazy_specification.rb | 7 +++- lib/bundler/source/path.rb | 4 ++- lib/bundler/source/path/installer.rb | 2 +- lib/bundler/source_list.rb | 2 +- lib/bundler/version.rb | 2 +- lib/rubygems.rb | 2 +- lib/rubygems/commands/update_command.rb | 24 ++++++++++++-- lib/rubygems/security/trust_dir.rb | 1 + .../bundler/installer/parallel_installer_spec.rb | 33 +++++++++++++++++++ .../bundler/installer/spec_installation_spec.rb | 4 +++ spec/bundler/install/gemfile/path_spec.rb | 3 +- spec/bundler/lock/lockfile_spec.rb | 24 ++++++++++++++ spec/bundler/runtime/platform_spec.rb | 38 ++++++++++++++++++++++ test/rubygems/test_gem_commands_update_command.rb | 29 ++++++++++++++++- 15 files changed, 194 insertions(+), 18 deletions(-) diff --git a/lib/bundler/installer/parallel_installer.rb b/lib/bundler/installer/parallel_installer.rb index c3bf584..5b6680e 100644 --- a/lib/bundler/installer/parallel_installer.rb +++ b/lib/bundler/installer/parallel_installer.rb @@ -6,10 +6,11 @@ require_relative "gem_installer" https://github.com/ruby/ruby/blob/trunk/lib/bundler/installer/parallel_installer.rb#L6 module Bundler class ParallelInstaller class SpecInstallation - attr_accessor :spec, :name, :post_install_message, :state, :error + attr_accessor :spec, :name, :full_name, :post_install_message, :state, :error def initialize(spec) @spec = spec @name = spec.name + @full_name = spec.full_name @state = :none @post_install_message = "" @error = nil @@ -49,14 +50,11 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/installer/parallel_installer.rb#L50 # Represents only the non-development dependencies, the ones that are # itself and are in the total list. def dependencies - @dependencies ||= begin - all_dependencies.reject {|dep| ignorable_dependency? dep } - end + @dependencies ||= all_dependencies.reject {|dep| ignorable_dependency? dep } end def missing_lockfile_dependencies(all_spec_names) - deps = all_dependencies.reject {|dep| ignorable_dependency? dep } - deps.reject {|dep| all_spec_names.include? dep.name } + dependencies.reject {|dep| all_spec_names.include? dep.name } end # Represents all dependencies @@ -65,7 +63,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/installer/parallel_installer.rb#L63 end def to_s - "#<#{self.class} #{@spec.full_name} (#{state})>" + "#<#{self.class} #{full_name} (#{state})>" end end @@ -99,12 +97,37 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/installer/parallel_installer.rb#L97 install_serially end + check_for_unmet_dependencies + handle_error if failed_specs.any? @specs ensure worker_pool && worker_pool.stop end + def check_for_unmet_dependencies + unmet_dependencies = @specs.map do |s| + [ + s, + s.dependencies.reject {|dep| @specs.any? {|spec| dep.matches_spec?(spec.spec) } }, + ] + end.reject {|a| a.last.empty? } + return if unmet_dependencies.empty? + + warning = [] + warning << "Your lockfile doesn't include a valid resolution." + warning << "You can fix this by regenerating your lockfile or trying to manually editing the bad locked gems to a version that satisfies all dependencies." + warning << "The unmet dependencies are:" + + unmet_dependencies.each do |spec, unmet_spec_dependencies| + unmet_spec_dependencies.each do |unmet_spec_dependency| + warning << "* #{unmet_spec_dependency}, depended upon #{spec.full_name}, unsatisfied by #{@specs.find {|s| s.name == unmet_spec_dependency.name && !unmet_spec_dependency.matches_spec?(s.spec) }.full_name}" + end + end + + Bundler.ui.warn(warning.join("\n")) + end + def check_for_corrupt_lockfile missing_dependencies = @specs.map do |s| [ diff --git a/lib/bundler/lazy_specification.rb b/lib/bundler/lazy_specification.rb index 04ba2a2..7cd7e42 100644 --- a/lib/bundler/lazy_specification.rb +++ b/lib/bundler/lazy_specification.rb @@ -73,7 +73,12 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/lazy_specification.rb#L73 same_platform_candidates = candidates.select do |spec| MatchPlatform.platforms_match?(spec.platform, platform_object) end - search = same_platform_candidates.last || candidates.last + installable_candidates = same_platform_candidates.select do |spec| + !spec.is_a?(RemoteSpecification) && + spec.required_ruby_version.satisfied_by?(Gem.ruby_version) && + spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version) + end + search = installable_candidates.last || same_platform_candidates.last search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification)) search end diff --git a/lib/bundler/source/path.rb b/lib/bundler/source/path.rb index 2c2e902..01f89b2 100644 --- a/lib/bundler/source/path.rb +++ b/lib/bundler/source/path.rb @@ -82,7 +82,9 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/source/path.rb#L82 end def install(spec, options = {}) - print_using_message "Using #{version_message(spec)} from #{self}" + using_message = "Using #{version_message(spec)} from #{self}" + using_message += " and installing its executables" unless spec.executables.empty? + print_using_message using_message generate_bin(spec, :disable_extensions => true) nil # no post-install message end diff --git a/lib/bundler/source/path/installer.rb b/lib/bundler/source/path/installer.rb index 72bfbb4..a70973b 100644 --- a/lib/bundler/source/path/installer.rb +++ b/lib/bundler/source/path/installer.rb @@ -35,7 +35,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/source/path/installer.rb#L35 run_hooks(:post_build) end - generate_bin unless spec.executables.nil? || spec.executables.empty? + generate_bin unless spec.executables.empty? run_hooks(:post_install) ensure diff --git a/lib/bundler/source_list.rb b/lib/bundler/source_list.rb index 51698af..6f5636f 100644 --- a/lib/bundler/source_list.rb +++ b/lib/bundler/source_list.rb @@ -88,7 +88,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/source_list.rb#L88 def lock_sources lock_sources = (path_sources + git_sources + plugin_sources).sort_by(&:to_s) if disable_multisource? - lock_sources + rubygems_sources.sort_by(&:to_s) + lock_sources + rubygems_sources.sort_by(&:to_s).uniq else lock_sources << combine_rubygems_sources end diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb index 5e71e22..5b6473c 100644 --- a/lib/bundler/version.rb +++ b/lib/bundler/version.rb @@ -1,7 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/lib/bundler/version.rb#L1 # frozen_string_literal: false module Bundler - VERSION = "2.2.14".freeze + VERSION = "2.2.15".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 6823602..61a2d46 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -8,7 +8,7 @@ https://github.com/ruby/ruby/blob/trunk/lib/rubygems.rb#L8 require 'rbconfig' module Gem - VERSION = "3.2.14".freeze + VERSION = "3.2.15".freeze end # Must be first since it unloads the prelude from 1.9.2 diff --git a/lib/rubygems/commands/update_command.rb b/lib/rubygems/commands/update_command.rb index fcc52c2..8d168d1 100644 --- a/lib/rubygems/commands/update_command.rb +++ b/lib/rubygems/commands/update_command.rb @@ -76,7 +76,7 @@ command to remove old versions. https://github.com/ruby/ruby/blob/trunk/lib/rubygems/commands/update_command.rb#L76 def check_oldest_rubygems(version) # :nodoc: if oldest_supported_version > version - alert_error "rubygems #{version} is not supported. The oldest supported version is #{oldest_supported_version}" + alert_error "rubygems #{version} is not supported on #{RUBY_VERSION}. The oldest version supported by this ruby is #{oldest_supported_version}" terminate_interaction 1 end end @@ -322,8 +322,26 @@ command to remove old versions. https://github.com/ruby/ruby/blob/trunk/lib/rubygems/commands/update_command.rb#L322 private + # + # Oldest version we support downgrading to. This is the version that + # originally ships with the first patch version of each ruby, because we never + # test each ruby against older rubygems, so we can't really guarantee it + # works. Version list can be checked here: https://stdgems.org/rubygems + # def oldest_supported_version - # for Ruby 2.3 - @oldest_supported_version ||= Gem::Version.new("2.5.2") + @oldest_supported_version ||= + if Gem.ruby_version > Gem::Version.new("3.0.a") + Gem::Version.new("3.2.3") + elsif Gem.ruby_version > Gem::Version.new("2.7.a") + Gem::Version.new("3.1.2") + elsif Gem.ruby_version > Gem::Version.new("2.6.a") + Gem::Version.new("3.0.1") + elsif Gem.ruby_version > Gem::Version.new("2.5. (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/