[rubygems/rubygems] Avoid needing a second pass to ignore unlocked gems

When converging locked specifications to select the ones that should be
preserved while resolving, we can avoid having to do a second pass to
ignore the ones that have been explicitly unlocked.

https://github.com/rubygems/rubygems/commit/411742703e
This commit is contained in:
David Rodríguez 2024-11-21 11:50:07 +01:00 committed by Hiroshi SHIBATA
parent 44ad2e3f38
commit 10de74b75b
2 changed files with 7 additions and 7 deletions

View File

@ -619,8 +619,8 @@ module Bundler
end end
end end
def filter_specs(specs, deps) def filter_specs(specs, deps, skips: [])
SpecSet.new(specs).for(deps, platforms) SpecSet.new(specs).for(deps, platforms, skips: skips)
end end
def materialize(dependencies) def materialize(dependencies)
@ -1022,7 +1022,7 @@ module Bundler
converged << s converged << s
end end
filter_specs(converged, deps).reject {|s| @gems_to_unlock.include?(s.name) } filter_specs(converged, deps, skips: @gems_to_unlock)
end end
def metadata_dependencies def metadata_dependencies

View File

@ -11,7 +11,7 @@ module Bundler
@specs = specs @specs = specs
end end
def for(dependencies, platforms_or_legacy_check = [nil], legacy_platforms = [nil]) def for(dependencies, platforms_or_legacy_check = [nil], legacy_platforms = [nil], skips: [])
platforms = if [true, false].include?(platforms_or_legacy_check) platforms = if [true, false].include?(platforms_or_legacy_check)
Bundler::SharedHelpers.major_deprecation 2, Bundler::SharedHelpers.major_deprecation 2,
"SpecSet#for received a `check` parameter, but that's no longer used and deprecated. " \ "SpecSet#for received a `check` parameter, but that's no longer used and deprecated. " \
@ -23,7 +23,7 @@ module Bundler
platforms_or_legacy_check platforms_or_legacy_check
end end
materialize_dependencies(dependencies, platforms) materialize_dependencies(dependencies, platforms, skips: skips)
@materializations.flat_map(&:specs).uniq @materializations.flat_map(&:specs).uniq
end end
@ -212,7 +212,7 @@ module Bundler
private private
def materialize_dependencies(dependencies, platforms = [nil]) def materialize_dependencies(dependencies, platforms = [nil], skips: [])
handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
deps = dependencies.product(platforms) deps = dependencies.product(platforms)
@materializations = [] @materializations = []
@ -233,7 +233,7 @@ module Bundler
deps.concat(materialization.dependencies) if materialization.complete? deps.concat(materialization.dependencies) if materialization.complete?
@materializations << materialization @materializations << materialization unless skips.include?(name)
end end
@materializations @materializations