ruby-changes:71941
From: David <ko1@a...>
Date: Tue, 24 May 2022 21:25:11 +0900 (JST)
Subject: [ruby-changes:71941] 633608ebd4 (master): [rubygems/rubygems] Fix crash when printing resolution conflicts on metadata requirements
https://git.ruby-lang.org/ruby.git/commit/?id=633608ebd4 From 633608ebd4cbdeea562dc4c608495134965a19a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@r...> Date: Tue, 24 May 2022 12:18:38 +0200 Subject: [rubygems/rubygems] Fix crash when printing resolution conflicts on metadata requirements https://github.com/rubygems/rubygems/commit/b69e1e9374 --- lib/bundler/resolver.rb | 13 ++++++------- spec/bundler/install/gems/resolving_spec.rb | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 2285114c57..8ec6d5dbc0 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -19,13 +19,15 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/resolver.rb#L19 # collection of gemspecs is returned. Otherwise, nil is returned. def self.resolve(requirements, source_requirements = {}, base = [], gem_version_promoter = GemVersionPromoter.new, additional_base_requirements = [], platforms = nil) base = SpecSet.new(base) unless base.is_a?(SpecSet) - resolver = new(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms) + metadata_requirements, regular_requirements = requirements.partition {|dep| dep.name.end_with?("\0") } + resolver = new(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms, metadata_requirements) result = resolver.start(requirements) - SpecSet.new(SpecSet.new(result).for(requirements.reject {|dep| dep.name.end_with?("\0") })) + SpecSet.new(SpecSet.new(result).for(regular_requirements)) end - def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms) + def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms, metadata_requirements) @source_requirements = source_requirements + @metadata_requirements = metadata_requirements @base = base @resolver = Molinillo::Resolver.new(self, self) @search_for = {} @@ -344,8 +346,6 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/resolver.rb#L346 trees.sort_by! {|t| t.reverse.map(&:name) } end - metadata_requirements = {} - o << trees.map do |tree| t = "".dup depth = 2 @@ -354,7 +354,6 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/resolver.rb#L354 base_tree_name = base_tree.name if base_tree_name.end_with?("\0") - metadata_requirements[base_tree_name] = base_tree t = nil else tree.each do |req| @@ -393,7 +392,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/resolver.rb#L392 end end elsif name.end_with?("\0") - o << %(\n Current #{name} version:\n #{SharedHelpers.pretty_dependency(metadata_requirements[name])}\n\n) + o << %(\n Current #{name} version:\n #{SharedHelpers.pretty_dependency(@metadata_requirements.find {|req| req.name == name })}\n\n) elsif conflict.locked_requirement o << "\n" o << %(Running `bundle update` will rebuild your snapshot from scratch, using only\n) diff --git a/spec/bundler/install/gems/resolving_spec.rb b/spec/bundler/install/gems/resolving_spec.rb index 469ecd412f..f23d137bc1 100644 --- a/spec/bundler/install/gems/resolving_spec.rb +++ b/spec/bundler/install/gems/resolving_spec.rb @@ -282,6 +282,27 @@ RSpec.describe "bundle install with install-time dependencies" do https://github.com/ruby/ruby/blob/trunk/spec/bundler/install/gems/resolving_spec.rb#L282 expect(err).not_to include("That means the author of parallel_tests (3.8.0) has removed it.") end + it "gives a meaningful error on ruby version mismatches between dependencies" do + build_repo4 do + build_gem "requires-old-ruby" do |s| + s.required_ruby_version = "< #{RUBY_VERSION}" + end + end + + build_lib("foo", :path => bundled_app) do |s| + s.required_ruby_version = ">= #{RUBY_VERSION}" + + s.add_dependency "requires-old-ruby" + end + + install_gemfile <<-G, :raise_on_error => false + source "#{file_uri_for(gem_repo4)}" + gemspec + G + + expect(err).to include("Bundler found conflicting requirements for the Ruby\0 version:") + end + it "installs the older version under rate limiting conditions" do build_repo4 do build_gem "rack", "9001.0.0" do |s| -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/