From f80bb3837c2ba2d46d8906c5f4bdc65f475c76db Mon Sep 17 00:00:00 2001 From: David Rodriguez Date: Thu, 21 Mar 2024 19:19:05 +0100 Subject: [rubygems/rubygems] Keep unfiltered versions separately https://github.com/rubygems/rubygems/commit/7b5cc51a96 --- lib/bundler/resolver.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 78beddd7a3..c148c79b37 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -50,8 +50,12 @@ module Bundler specs[name] = matches.sort_by {|s| [s.version, s.platform.to_s] } end + @all_versions = Hash.new do |candidates, package| + candidates[package] = all_versions_for(package) + end + @sorted_versions = Hash.new do |candidates, package| - candidates[package] = all_versions_for(package).sort + candidates[package] = filtered_versions_for(package).sort end @sorted_versions[root] = [root_version] @@ -249,7 +253,7 @@ module Bundler locked_requirement = base_requirements[name] results = filter_matching_specs(results, locked_requirement) if locked_requirement - versions = results.group_by(&:version).reduce([]) do |groups, (version, specs)| + results.group_by(&:version).reduce([]) do |groups, (version, specs)| platform_specs = package.platforms.map {|platform| select_best_platform_match(specs, platform) } # If package is a top-level dependency, @@ -276,8 +280,6 @@ module Bundler groups end - - @gem_version_promoter.filter_versions(package, versions) end def source_for(name) @@ -336,6 +338,10 @@ module Bundler private + def filtered_versions_for(package) + @gem_version_promoter.filter_versions(package, @all_versions[package]) + end + def filter_matching_specs(specs, requirements) Array(requirements).flat_map do |requirement| specs.select {| spec| requirement_satisfied_by?(requirement, spec) } @@ -380,6 +386,7 @@ module Bundler dep_range = dep_constraint.range versions = select_sorted_versions(dep_package, dep_range) if versions.empty? && dep_package.ignores_prereleases? + @all_versions.delete(dep_package) @sorted_versions.delete(dep_package) dep_package.consider_prereleases! versions = select_sorted_versions(dep_package, dep_range) -- cgit v1.2.3