summaryrefslogtreecommitdiff
path: root/lib/bundler/resolver.rb
diff options
context:
space:
mode:
authorDavid Rodriguez <deivid.rodriguez@riseup.net>2024-03-21 19:19:05 +0100
committergit <svn-admin@ruby-lang.org>2024-04-01 15:03:27 +0000
commitf80bb3837c2ba2d46d8906c5f4bdc65f475c76db (patch)
tree5840164dbe203544909c4c61a8567d6455347b3f /lib/bundler/resolver.rb
parentbfdbdf7aaeff3c987c3a09cc550358a321d8df32 (diff)
[rubygems/rubygems] Keep unfiltered versions separately
https://github.com/rubygems/rubygems/commit/7b5cc51a96
Diffstat (limited to 'lib/bundler/resolver.rb')
-rw-r--r--lib/bundler/resolver.rb15
1 files 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)