Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
instance method
Gem::Resolver#cooldown_skipped_summary
cooldown_skipped_summary(requests)
lib/rubygems/resolver.rb
View on GitHub ↗
# File tmp/rubies/ruby-4.1.0-preview1/lib/rubygems/resolver.rb, line 427
def cooldown_skipped_summary(requests)
skipped_specs = @cooldown_skipped_specs || {}
return [] if skipped_specs.empty?
requirements = Hash.new {|h, name| h[name] = [] }
@needed.each {|dep| requirements[dep.name] << dep.requirement }
requests.each do |request|
request.spec.dependencies.each do |dep|
next if dep.type == :development && !@development
requirements[dep.name] << dep.requirement
end
end
resolved = {}
requests.each do |request|
version = resolved[request.spec.name]
resolved[request.spec.name] = request.spec.version if version.nil? || request.spec.version > version
end
newest_skipped = {}
skipped_specs.each do |(name, version), spec|
resolved_version = resolved[name]
next unless resolved_version && version > resolved_version
next unless requirements[name].all? {|req| req.satisfied_by?(version) }
newest = newest_skipped[name]
newest_skipped[name] = spec if newest.nil? || version > newest.version
end
newest_skipped.values.sort_by(&:name).map do |spec|
{
name: spec.name,
version: spec.version,
resolved: resolved[spec.name],
available_in_days: @cooldown.remaining_days(spec.created_at),
}
end
end
Reports, per gem, the newest version that the cooldown kept out of a successful resolution. A skipped version is only worth reporting when it is newer than the resolved version and satisfies every requirement the final resolution places on that gem, so we don’t claim a version the resolver could never have picked anyway.