[前][次][番号順一覧][スレッド一覧]

ruby-changes:47386

From: ko1 <ko1@a...>
Date: Fri, 4 Aug 2017 23:57:36 +0900 (JST)
Subject: [ruby-changes:47386] ko1:r59502 (trunk): use stable sort.

ko1	2017-08-04 23:57:31 +0900 (Fri, 04 Aug 2017)

  New Revision: 59502

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=59502

  Log:
    use stable sort.
    
    * lib/rubygems/resolver.rb (sort_dependencies): use stable sort.
      TestGemRequestSetLockfile#test_to_s_gem_dependency_non_default
      fails because this method return unstable results.
      Note that Enumerable#sort_by is unstable.
    
      I'm not sure the "stable" nature is required for RubyGems.
      The fact is that using stable sort, the test passed on
      mswin64+VS2017 where the sort results was reverse (unstable) order.
      Also using `-i` instead of `i` (it means forcing unstable sort)
      this test fails on other platform where the test successed before.

  Modified files:
    trunk/lib/rubygems/resolver.rb
Index: lib/rubygems/resolver.rb
===================================================================
--- lib/rubygems/resolver.rb	(revision 59501)
+++ lib/rubygems/resolver.rb	(revision 59502)
@@ -254,13 +254,14 @@ class Gem::Resolver https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver.rb#L254
   end
 
   def sort_dependencies(dependencies, activated, conflicts)
-    dependencies.sort_by do |dependency|
+    dependencies.sort_by.with_index do |dependency, i|
       name = name_for(dependency)
       [
         activated.vertex_named(name).payload ? 0 : 1,
         amount_constrained(dependency),
         conflicts[name] ? 0 : 1,
         activated.vertex_named(name).payload ? 0 : search_for(dependency).count,
+        i # for stable sort
       ]
     end
   end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]