ruby-changes:73530
From: David <ko1@a...>
Date: Mon, 12 Sep 2022 22:13:44 +0900 (JST)
Subject: [ruby-changes:73530] 6a21d196ba (master): [rubygems/rubygems] Let specs be sorted just once by the gem version promoter
https://git.ruby-lang.org/ruby.git/commit/?id=6a21d196ba From 6a21d196ba774f219956ede5d4cf276b1af433c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@r...> Date: Wed, 24 Aug 2022 10:05:20 +0200 Subject: [rubygems/rubygems] Let specs be sorted just once by the gem version promoter https://github.com/rubygems/rubygems/commit/3cea25a39d --- lib/bundler/gem_version_promoter.rb | 13 ++++++------- lib/bundler/index.rb | 14 +------------- lib/bundler/resolver.rb | 2 +- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/lib/bundler/gem_version_promoter.rb b/lib/bundler/gem_version_promoter.rb index 1ae41e2928..ee2c38a6ec 100644 --- a/lib/bundler/gem_version_promoter.rb +++ b/lib/bundler/gem_version_promoter.rb @@ -116,15 +116,14 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/gem_version_promoter.rb#L116 end def sort_dep_specs(spec_groups, locked_spec) - return spec_groups unless locked_spec - @gem_name = locked_spec.name - @locked_version = locked_spec.version + @locked_version = locked_spec&.version + @gem_name = locked_spec&.name result = spec_groups.sort do |a, b| @a_ver = a.version @b_ver = b.version - unless @prerelease_specified[@gem_name] + unless @gem_name && @prerelease_specified[@gem_name] a_pre = @a_ver.prerelease? b_pre = @b_ver.prerelease? @@ -148,7 +147,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/gem_version_promoter.rb#L147 end def either_version_older_than_locked - @a_ver < @locked_version || @b_ver < @locked_version + @locked_version && (@a_ver < @locked_version || @b_ver < @locked_version) end def segments_do_not_match(level) @@ -157,7 +156,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/gem_version_promoter.rb#L156 end def unlocking_gem? - unlock_gems.empty? || unlock_gems.include?(@gem_name) + unlock_gems.empty? || (@gem_name && unlock_gems.include?(@gem_name)) end # Specific version moves can't always reliably be done during sorting @@ -165,7 +164,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/gem_version_promoter.rb#L164 def post_sort(result) # default :major behavior in Bundler does not do this return result if major? - if unlocking_gem? + if unlocking_gem? || @locked_version.nil? result else move_version_to_end(result, @locked_version) diff --git a/lib/bundler/index.rb b/lib/bundler/index.rb index c639936cb0..9c48c9032b 100644 --- a/lib/bundler/index.rb +++ b/lib/bundler/index.rb @@ -57,16 +57,12 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/index.rb#L57 # Search this index's specs, and any source indexes that this index knows # about, returning all of the results. def search(query) - sort_specs(unsorted_search(query)) - end - - def unsorted_search(query) results = local_search(query) seen = results.map(&:full_name).uniq unless @sources.empty? @sources.each do |source| - source.unsorted_search(query).each do |spec| + source.search(query).each do |spec| next if seen.include?(spec.full_name) seen << spec.full_name @@ -76,14 +72,6 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/index.rb#L72 results end - protected :unsorted_search - - def sort_specs(specs) - specs.sort_by do |s| - platform_string = s.platform.to_s - [s.version, platform_string == RUBY ? NULL : platform_string] - end - end def local_search(query) case query diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index fcb3812c5a..86b7177624 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -284,7 +284,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/resolver.rb#L284 end def gem_not_found_message(name, requirement, source, extra_message = "") - specs = source.specs.search(name) + specs = source.specs.search(name).sort_by {|s| [s.version, s.platform.to_s] } matching_part = name requirement_label = SharedHelpers.pretty_dependency(requirement) cache_message = begin -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/