From 80389915838fe235b5691391ba00e2733e31d93b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Thu, 9 Feb 2023 15:24:06 +0100 Subject: [rubygems/rubygems] Sync with pub_grub main branch We became a bit out of sync lately. https://github.com/rubygems/rubygems/commit/6161a2610a --- .../vendor/pub_grub/lib/pub_grub/static_package_source.rb | 9 ++++++++- lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb | 9 +++++---- lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb | 5 ++++- spec/bundler/install/gems/resolving_spec.rb | 2 +- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb b/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb index e895812bed..4bf61461b2 100644 --- a/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +++ b/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb @@ -19,7 +19,14 @@ module Bundler::PubGrub version = Gem::Version.new(version) @packages[name] ||= {} raise ArgumentError, "#{name} #{version} declared twice" if @packages[name].key?(version) - @packages[name][version] = deps + @packages[name][version] = clean_deps(name, version, deps) + end + + private + + # Exclude redundant self-referencing dependencies + def clean_deps(name, version, deps) + deps.reject {|dep_name, req| name == dep_name && Bundler::PubGrub::RubyGems.parse_range(req).include?(version) } end end diff --git a/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb b/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb index 9133332d01..b71f3eaf53 100644 --- a/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +++ b/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb @@ -15,15 +15,16 @@ module Bundler::PubGrub package.hash ^ range.hash end + def ==(other) + package == other.package && + range == other.range + end + def eql?(other) package.eql?(other.package) && range.eql?(other.range) end - def ==(other) - package == other.package && range == other.range - end - class << self def exact(package, version) range = VersionRange.new(min: version, max: version, include_min: true, include_max: true) diff --git a/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb b/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb index ea5e455968..2cb8412cf3 100644 --- a/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +++ b/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb @@ -125,6 +125,7 @@ module Bundler::PubGrub package = next_package_to_try unsatisfied_term = solution.unsatisfied.find { |t| t.package == package } version = source.versions_for(package, unsatisfied_term.constraint.range).first + logger.debug { "attempting #{package} #{version}" } if version.nil? add_incompatibility source.no_versions_incompatibility_for(package, unsatisfied_term) @@ -148,9 +149,11 @@ module Bundler::PubGrub end unless conflict - logger.info { "selecting #{package} #{version}" } + logger.info { "selected #{package} #{version}" } solution.decide(package, version) + else + logger.info { "conflict: #{conflict.inspect}" } end package diff --git a/spec/bundler/install/gems/resolving_spec.rb b/spec/bundler/install/gems/resolving_spec.rb index 279d3422c1..fb6dda2f88 100644 --- a/spec/bundler/install/gems/resolving_spec.rb +++ b/spec/bundler/install/gems/resolving_spec.rb @@ -190,7 +190,7 @@ RSpec.describe "bundle install with install-time dependencies" do expect(out).to include(" net_b"). and include("Resolving dependencies..."). and include("Solution found after 1 attempts:"). - and include("selecting net_b 1.0") + and include("selected net_b 1.0") end end end -- cgit v1.2.3