changeset 3322:20b6dae466a7

stablesort: use 'depth' in mergepoint tie breaker The parents with the most depth will is considered lower. It has a couple of advantages. 1) the more shallow parent probably have less exclusive revision, 2) it makes Oedipus merge behave like close to the linear case,
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 20 Dec 2017 16:20:26 +0100
parents 14024940f369
children 4a84947010a1
files hgext3rd/evolve/stablesort.py tests/test-stablerange.t tests/test-stablesort-criss-cross.t tests/test-stablesort.t
diffstat 4 files changed, 272 insertions(+), 266 deletions(-) [+]
line wrap: on
line diff
--- a/hgext3rd/evolve/stablesort.py	Wed Dec 20 13:41:33 2017 +0100
+++ b/hgext3rd/evolve/stablesort.py	Wed Dec 20 16:20:26 2017 +0100
@@ -41,7 +41,12 @@
         * number of jump points.
         * <insert-your-idea>
     """
-    return repo.changelog.node
+    node = repo.changelog.node
+    depth = repo.depthcache.get
+
+    def key(rev):
+        return (-depth(rev), node(rev))
+    return key
 
 @eh.command(
     'debugstablesort',
--- a/tests/test-stablerange.t	Wed Dec 20 13:41:33 2017 +0100
+++ b/tests/test-stablerange.t	Wed Dec 20 16:20:26 2017 +0100
@@ -449,14 +449,14 @@
 We are still able to reuse one of the branch however
 
   $ hg debugstablerange --verify --verbose --subranges --rev merge
-  8aca7f8c9bd2-0 (10, 11, 11) [complete] - bebd167eb94d-0 (4, 5, 5), 42b07e8da27d-1 (7, 4, 3), 8aca7f8c9bd2-8 (10, 11, 3)
-  bebd167eb94d-0 (4, 5, 5) [complete] - 2dc09a01254d-0 (3, 4, 4), bebd167eb94d-4 (4, 5, 1)
-  2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
-  42b07e8da27d-1 (7, 4, 3) [complete] - de561312eff4-1 (5, 2, 1), 42b07e8da27d-2 (7, 4, 2)
-  8aca7f8c9bd2-8 (10, 11, 3) [complete] - f4b7da68b467-4 (9, 6, 2), 8aca7f8c9bd2-10 (10, 11, 1)
-  2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
+  8aca7f8c9bd2-0 (10, 11, 11) [complete] - f4b7da68b467-0 (9, 6, 6), 01241442b3c2-1 (2, 3, 2), 8aca7f8c9bd2-8 (10, 11, 3)
+  f4b7da68b467-0 (9, 6, 6) [complete] - 42b07e8da27d-0 (7, 4, 4), f4b7da68b467-4 (9, 6, 2)
+  42b07e8da27d-0 (7, 4, 4) [complete] - de561312eff4-0 (5, 2, 2), 42b07e8da27d-2 (7, 4, 2)
+  8aca7f8c9bd2-8 (10, 11, 3) [complete] - bebd167eb94d-3 (4, 5, 2), 8aca7f8c9bd2-10 (10, 11, 1)
+  01241442b3c2-1 (2, 3, 2) [complete] - 66f7d451a68b-1 (1, 2, 1), 01241442b3c2-2 (2, 3, 1)
   42b07e8da27d-2 (7, 4, 2) [complete] - b9bc20507e0b-2 (6, 3, 1), 42b07e8da27d-3 (7, 4, 1)
-  66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
+  bebd167eb94d-3 (4, 5, 2) [complete] - 2dc09a01254d-3 (3, 4, 1), bebd167eb94d-4 (4, 5, 1)
+  de561312eff4-0 (5, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), de561312eff4-1 (5, 2, 1)
   f4b7da68b467-4 (9, 6, 2) [complete] - 857477a9aebb-4 (8, 5, 1), f4b7da68b467-5 (9, 6, 1)
   01241442b3c2-2 (2, 3, 1) [leaf] - 
   1ea73414a91b-0 (0, 1, 1) [leaf] - 
@@ -474,14 +474,18 @@
   --- left.range	* (glob)
   +++ merge.range	* (glob)
   @@ -1,9 +1,20 @@
-  +8aca7f8c9bd2-0 (10, 11, 11) [complete] - bebd167eb94d-0 (4, 5, 5), 42b07e8da27d-1 (7, 4, 3), 8aca7f8c9bd2-8 (10, 11, 3)
-   bebd167eb94d-0 (4, 5, 5) [complete] - 2dc09a01254d-0 (3, 4, 4), bebd167eb94d-4 (4, 5, 1)
-   2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
-  +42b07e8da27d-1 (7, 4, 3) [complete] - de561312eff4-1 (5, 2, 1), 42b07e8da27d-2 (7, 4, 2)
-  +8aca7f8c9bd2-8 (10, 11, 3) [complete] - f4b7da68b467-4 (9, 6, 2), 8aca7f8c9bd2-10 (10, 11, 1)
-   2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
+  -bebd167eb94d-0 (4, 5, 5) [complete] - 2dc09a01254d-0 (3, 4, 4), bebd167eb94d-4 (4, 5, 1)
+  -2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
+  -2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
+  -66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
+  +8aca7f8c9bd2-0 (10, 11, 11) [complete] - f4b7da68b467-0 (9, 6, 6), 01241442b3c2-1 (2, 3, 2), 8aca7f8c9bd2-8 (10, 11, 3)
+  +f4b7da68b467-0 (9, 6, 6) [complete] - 42b07e8da27d-0 (7, 4, 4), f4b7da68b467-4 (9, 6, 2)
+  +42b07e8da27d-0 (7, 4, 4) [complete] - de561312eff4-0 (5, 2, 2), 42b07e8da27d-2 (7, 4, 2)
+  +8aca7f8c9bd2-8 (10, 11, 3) [complete] - bebd167eb94d-3 (4, 5, 2), 8aca7f8c9bd2-10 (10, 11, 1)
+  +01241442b3c2-1 (2, 3, 2) [complete] - 66f7d451a68b-1 (1, 2, 1), 01241442b3c2-2 (2, 3, 1)
   +42b07e8da27d-2 (7, 4, 2) [complete] - b9bc20507e0b-2 (6, 3, 1), 42b07e8da27d-3 (7, 4, 1)
-   66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
+  +bebd167eb94d-3 (4, 5, 2) [complete] - 2dc09a01254d-3 (3, 4, 1), bebd167eb94d-4 (4, 5, 1)
+  +de561312eff4-0 (5, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), de561312eff4-1 (5, 2, 1)
   +f4b7da68b467-4 (9, 6, 2) [complete] - 857477a9aebb-4 (8, 5, 1), f4b7da68b467-5 (9, 6, 1)
    01241442b3c2-2 (2, 3, 1) [leaf] - 
    1ea73414a91b-0 (0, 1, 1) [leaf] - 
@@ -499,17 +503,14 @@
   --- right.range	* (glob)
   +++ merge.range	* (glob)
   @@ -1,11 +1,20 @@
-  -f4b7da68b467-0 (9, 6, 6) [complete] - 42b07e8da27d-0 (7, 4, 4), f4b7da68b467-4 (9, 6, 2)
-  -42b07e8da27d-0 (7, 4, 4) [complete] - de561312eff4-0 (5, 2, 2), 42b07e8da27d-2 (7, 4, 2)
-  +8aca7f8c9bd2-0 (10, 11, 11) [complete] - bebd167eb94d-0 (4, 5, 5), 42b07e8da27d-1 (7, 4, 3), 8aca7f8c9bd2-8 (10, 11, 3)
-  +bebd167eb94d-0 (4, 5, 5) [complete] - 2dc09a01254d-0 (3, 4, 4), bebd167eb94d-4 (4, 5, 1)
-  +2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
-  +42b07e8da27d-1 (7, 4, 3) [complete] - de561312eff4-1 (5, 2, 1), 42b07e8da27d-2 (7, 4, 2)
-  +8aca7f8c9bd2-8 (10, 11, 3) [complete] - f4b7da68b467-4 (9, 6, 2), 8aca7f8c9bd2-10 (10, 11, 1)
-  +2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
+  +8aca7f8c9bd2-0 (10, 11, 11) [complete] - f4b7da68b467-0 (9, 6, 6), 01241442b3c2-1 (2, 3, 2), 8aca7f8c9bd2-8 (10, 11, 3)
+   f4b7da68b467-0 (9, 6, 6) [complete] - 42b07e8da27d-0 (7, 4, 4), f4b7da68b467-4 (9, 6, 2)
+   42b07e8da27d-0 (7, 4, 4) [complete] - de561312eff4-0 (5, 2, 2), 42b07e8da27d-2 (7, 4, 2)
+  +8aca7f8c9bd2-8 (10, 11, 3) [complete] - bebd167eb94d-3 (4, 5, 2), 8aca7f8c9bd2-10 (10, 11, 1)
+  +01241442b3c2-1 (2, 3, 2) [complete] - 66f7d451a68b-1 (1, 2, 1), 01241442b3c2-2 (2, 3, 1)
    42b07e8da27d-2 (7, 4, 2) [complete] - b9bc20507e0b-2 (6, 3, 1), 42b07e8da27d-3 (7, 4, 1)
-  -de561312eff4-0 (5, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), de561312eff4-1 (5, 2, 1)
-  +66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
+  +bebd167eb94d-3 (4, 5, 2) [complete] - 2dc09a01254d-3 (3, 4, 1), bebd167eb94d-4 (4, 5, 1)
+   de561312eff4-0 (5, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), de561312eff4-1 (5, 2, 1)
    f4b7da68b467-4 (9, 6, 2) [complete] - 857477a9aebb-4 (8, 5, 1), f4b7da68b467-5 (9, 6, 1)
   +01241442b3c2-2 (2, 3, 1) [leaf] - 
    1ea73414a91b-0 (0, 1, 1) [leaf] - 
@@ -527,16 +528,16 @@
 Range above the merge, reuse subrange from the merge
 
   $ hg debugstablerange --verify --verbose --subranges --rev tip
-  e6b8d5b46647-0 (12, 13, 13) [complete] - bebd167eb94d-0 (4, 5, 5), 42b07e8da27d-1 (7, 4, 3), e6b8d5b46647-8 (12, 13, 5)
-  bebd167eb94d-0 (4, 5, 5) [complete] - 2dc09a01254d-0 (3, 4, 4), bebd167eb94d-4 (4, 5, 1)
+  e6b8d5b46647-0 (12, 13, 13) [complete] - f4b7da68b467-0 (9, 6, 6), 01241442b3c2-1 (2, 3, 2), e6b8d5b46647-8 (12, 13, 5)
+  f4b7da68b467-0 (9, 6, 6) [complete] - 42b07e8da27d-0 (7, 4, 4), f4b7da68b467-4 (9, 6, 2)
   e6b8d5b46647-8 (12, 13, 5) [complete] - 485383494a89-8 (11, 12, 4), e6b8d5b46647-12 (12, 13, 1)
-  2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
-  485383494a89-8 (11, 12, 4) [complete] - f4b7da68b467-4 (9, 6, 2), 485383494a89-10 (11, 12, 2)
-  42b07e8da27d-1 (7, 4, 3) [complete] - de561312eff4-1 (5, 2, 1), 42b07e8da27d-2 (7, 4, 2)
-  2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
+  42b07e8da27d-0 (7, 4, 4) [complete] - de561312eff4-0 (5, 2, 2), 42b07e8da27d-2 (7, 4, 2)
+  485383494a89-8 (11, 12, 4) [complete] - bebd167eb94d-3 (4, 5, 2), 485383494a89-10 (11, 12, 2)
+  01241442b3c2-1 (2, 3, 2) [complete] - 66f7d451a68b-1 (1, 2, 1), 01241442b3c2-2 (2, 3, 1)
   42b07e8da27d-2 (7, 4, 2) [complete] - b9bc20507e0b-2 (6, 3, 1), 42b07e8da27d-3 (7, 4, 1)
   485383494a89-10 (11, 12, 2) [complete] - 8aca7f8c9bd2-10 (10, 11, 1), 485383494a89-11 (11, 12, 1)
-  66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
+  bebd167eb94d-3 (4, 5, 2) [complete] - 2dc09a01254d-3 (3, 4, 1), bebd167eb94d-4 (4, 5, 1)
+  de561312eff4-0 (5, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), de561312eff4-1 (5, 2, 1)
   f4b7da68b467-4 (9, 6, 2) [complete] - 857477a9aebb-4 (8, 5, 1), f4b7da68b467-5 (9, 6, 1)
   01241442b3c2-2 (2, 3, 1) [leaf] - 
   1ea73414a91b-0 (0, 1, 1) [leaf] - 
@@ -555,21 +556,21 @@
   $ diff -u merge.range tip.range
   --- merge.range	* (glob)
   +++ tip.range	* (glob)
-  @@ -1,20 +1,24 @@
-  -8aca7f8c9bd2-0 (10, 11, 11) [complete] - bebd167eb94d-0 (4, 5, 5), 42b07e8da27d-1 (7, 4, 3), 8aca7f8c9bd2-8 (10, 11, 3)
-  +e6b8d5b46647-0 (12, 13, 13) [complete] - bebd167eb94d-0 (4, 5, 5), 42b07e8da27d-1 (7, 4, 3), e6b8d5b46647-8 (12, 13, 5)
-   bebd167eb94d-0 (4, 5, 5) [complete] - 2dc09a01254d-0 (3, 4, 4), bebd167eb94d-4 (4, 5, 1)
+  @@ -1,9 +1,11 @@
+  -8aca7f8c9bd2-0 (10, 11, 11) [complete] - f4b7da68b467-0 (9, 6, 6), 01241442b3c2-1 (2, 3, 2), 8aca7f8c9bd2-8 (10, 11, 3)
+  +e6b8d5b46647-0 (12, 13, 13) [complete] - f4b7da68b467-0 (9, 6, 6), 01241442b3c2-1 (2, 3, 2), e6b8d5b46647-8 (12, 13, 5)
+   f4b7da68b467-0 (9, 6, 6) [complete] - 42b07e8da27d-0 (7, 4, 4), f4b7da68b467-4 (9, 6, 2)
   +e6b8d5b46647-8 (12, 13, 5) [complete] - 485383494a89-8 (11, 12, 4), e6b8d5b46647-12 (12, 13, 1)
-   2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
-  +485383494a89-8 (11, 12, 4) [complete] - f4b7da68b467-4 (9, 6, 2), 485383494a89-10 (11, 12, 2)
-   42b07e8da27d-1 (7, 4, 3) [complete] - de561312eff4-1 (5, 2, 1), 42b07e8da27d-2 (7, 4, 2)
-  -8aca7f8c9bd2-8 (10, 11, 3) [complete] - f4b7da68b467-4 (9, 6, 2), 8aca7f8c9bd2-10 (10, 11, 1)
-   2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
+   42b07e8da27d-0 (7, 4, 4) [complete] - de561312eff4-0 (5, 2, 2), 42b07e8da27d-2 (7, 4, 2)
+  -8aca7f8c9bd2-8 (10, 11, 3) [complete] - bebd167eb94d-3 (4, 5, 2), 8aca7f8c9bd2-10 (10, 11, 1)
+  +485383494a89-8 (11, 12, 4) [complete] - bebd167eb94d-3 (4, 5, 2), 485383494a89-10 (11, 12, 2)
+   01241442b3c2-1 (2, 3, 2) [complete] - 66f7d451a68b-1 (1, 2, 1), 01241442b3c2-2 (2, 3, 1)
    42b07e8da27d-2 (7, 4, 2) [complete] - b9bc20507e0b-2 (6, 3, 1), 42b07e8da27d-3 (7, 4, 1)
   +485383494a89-10 (11, 12, 2) [complete] - 8aca7f8c9bd2-10 (10, 11, 1), 485383494a89-11 (11, 12, 1)
-   66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
+   bebd167eb94d-3 (4, 5, 2) [complete] - 2dc09a01254d-3 (3, 4, 1), bebd167eb94d-4 (4, 5, 1)
+   de561312eff4-0 (5, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), de561312eff4-1 (5, 2, 1)
    f4b7da68b467-4 (9, 6, 2) [complete] - 857477a9aebb-4 (8, 5, 1), f4b7da68b467-5 (9, 6, 1)
-   01241442b3c2-2 (2, 3, 1) [leaf] - 
+  @@ -11,10 +13,12 @@
    1ea73414a91b-0 (0, 1, 1) [leaf] - 
    2dc09a01254d-3 (3, 4, 1) [leaf] - 
    42b07e8da27d-3 (7, 4, 1) [leaf] - 
--- a/tests/test-stablesort-criss-cross.t	Wed Dec 20 13:41:33 2017 +0100
+++ b/tests/test-stablesort-criss-cross.t	Wed Dec 20 16:20:26 2017 +0100
@@ -397,11 +397,11 @@
   1ea73414a91b
   66f7d451a68b
   01241442b3c2
-  0c1445abb33d
-  65eb34ffc3a8
   2dc09a01254d
   bebd167eb94d
   c8d03c1b5e94
+  0c1445abb33d
+  65eb34ffc3a8
   07c648efceeb
   c81423bf5a24
   5ba9a53052ed
@@ -409,11 +409,11 @@
   === checking 1ea73414a91b ===
   === checking 66f7d451a68b ===
   === checking 01241442b3c2 ===
-  === checking 0c1445abb33d ===
-  === checking 65eb34ffc3a8 ===
   === checking 2dc09a01254d ===
   === checking bebd167eb94d ===
   === checking c8d03c1b5e94 ===
+  === checking 0c1445abb33d ===
+  === checking 65eb34ffc3a8 ===
   === checking 07c648efceeb ===
   === checking c81423bf5a24 ===
   === checking 5ba9a53052ed ===
@@ -421,41 +421,41 @@
   1ea73414a91b
   66f7d451a68b
   01241442b3c2
-  0c1445abb33d
-  65eb34ffc3a8
   2dc09a01254d
   bebd167eb94d
   c8d03c1b5e94
+  0c1445abb33d
+  65eb34ffc3a8
   c81423bf5a24
   $ checktopo AmergeA
   === checking 1ea73414a91b ===
   === checking 66f7d451a68b ===
   === checking 01241442b3c2 ===
-  === checking 0c1445abb33d ===
-  === checking 65eb34ffc3a8 ===
   === checking 2dc09a01254d ===
   === checking bebd167eb94d ===
   === checking c8d03c1b5e94 ===
+  === checking 0c1445abb33d ===
+  === checking 65eb34ffc3a8 ===
   === checking c81423bf5a24 ===
   $ hg showsort --rev 'AmergeB'
   1ea73414a91b
   66f7d451a68b
   01241442b3c2
-  0c1445abb33d
-  65eb34ffc3a8
   2dc09a01254d
   bebd167eb94d
   c8d03c1b5e94
+  0c1445abb33d
+  65eb34ffc3a8
   07c648efceeb
   $ checktopo AmergeB
   === checking 1ea73414a91b ===
   === checking 66f7d451a68b ===
   === checking 01241442b3c2 ===
-  === checking 0c1445abb33d ===
-  === checking 65eb34ffc3a8 ===
   === checking 2dc09a01254d ===
   === checking bebd167eb94d ===
   === checking c8d03c1b5e94 ===
+  === checking 0c1445abb33d ===
+  === checking 65eb34ffc3a8 ===
   === checking 07c648efceeb ===
 
 close criss cross
@@ -463,11 +463,11 @@
   1ea73414a91b
   66f7d451a68b
   01241442b3c2
-  0c1445abb33d
-  65eb34ffc3a8
   2dc09a01254d
   bebd167eb94d
   c8d03c1b5e94
+  0c1445abb33d
+  65eb34ffc3a8
   07c648efceeb
   c81423bf5a24
   5ba9a53052ed
@@ -481,11 +481,11 @@
   === checking 1ea73414a91b ===
   === checking 66f7d451a68b ===
   === checking 01241442b3c2 ===
-  === checking 0c1445abb33d ===
-  === checking 65eb34ffc3a8 ===
   === checking 2dc09a01254d ===
   === checking bebd167eb94d ===
   === checking c8d03c1b5e94 ===
+  === checking 0c1445abb33d ===
+  === checking 65eb34ffc3a8 ===
   === checking 07c648efceeb ===
   === checking c81423bf5a24 ===
   === checking 5ba9a53052ed ===
@@ -502,11 +502,11 @@
   1ea73414a91b
   66f7d451a68b
   01241442b3c2
-  0c1445abb33d
-  65eb34ffc3a8
   2dc09a01254d
   bebd167eb94d
   c8d03c1b5e94
+  0c1445abb33d
+  65eb34ffc3a8
   07c648efceeb
   c81423bf5a24
   5ba9a53052ed
@@ -516,14 +516,25 @@
   39bab1cb1cbe
   55bf3fdb634f
   3e1560705803
+  17b6e6bac221
+  5ce588c2b7c5
+  f2bdd828a3aa
+  a457569c5306
+  ad46a4a0fc10
+  b115c694654e
+  673f5499c8c2
+  900dd066a072
+  97ac964e34b7
+  0d153e3ad632
+  c37e7cd9f2bd
+  9a67238ad1c4
   9729470d9329
   884936b34999
-  b115c694654e
-  8ecb28746ec4
   de05b9c29ec7
-  d917f77a6439
-  c3c7fa726f88
-  97d19fc5236f
+  d99e0f7dad5b
+  e4cfd6264623
+  fac9e582edd1
+  89a0fe204177
   4f5078f7da8a
   2bd677d0f13a
   3bdb00d5c818
@@ -533,26 +544,15 @@
   2ea3fbf151b5
   47c836a1f13e
   722d1b8b8942
-  17b6e6bac221
-  5ce588c2b7c5
-  f2bdd828a3aa
-  a457569c5306
-  ad46a4a0fc10
   4b39f229a0ce
   d94da36be176
   eed373b0090d
+  b3cf98c3d587
+  8ecb28746ec4
+  d917f77a6439
+  c3c7fa726f88
+  97d19fc5236f
   2472d042ec95
-  673f5499c8c2
-  900dd066a072
-  97ac964e34b7
-  0d153e3ad632
-  c37e7cd9f2bd
-  9a67238ad1c4
-  d99e0f7dad5b
-  e4cfd6264623
-  fac9e582edd1
-  89a0fe204177
-  b3cf98c3d587
   041e1188f5f1
   0484d39906c8
   5eec91b12a58
@@ -565,17 +565,22 @@
   d6c9e2d27f14
   37ad3ab0cddf
   c7d3029bf731
-  1f4a19f83a29
-  43fc0b77ff07
-  31d7b43cc321
-  c713eae2d31f
   76151e8066e1
   c7c1497fc270
   e7135b665740
+  c713eae2d31f
   82238c0bc950
+  43fc0b77ff07
+  1f4a19f83a29
+  31d7b43cc321
   dbde319d43a3
   8b79544bb56d
   721ba7c5f4ff
+  0bab31f71a21
+  40553f55397e
+  e3e6738c56ce
+  790cdfecd168
+  469c700e9ed8
   01e29e20ea3f
   32b41ca704e1
   88714f4125cb
@@ -586,11 +591,6 @@
   b33fd5ad4c0c
   cd345198cf12
   28be96b80dc1
-  0bab31f71a21
-  40553f55397e
-  e3e6738c56ce
-  790cdfecd168
-  469c700e9ed8
   8ae32c3ed670
   84d6ec6a8e21
   01f771406cab
@@ -598,11 +598,11 @@
   === checking 1ea73414a91b ===
   === checking 66f7d451a68b ===
   === checking 01241442b3c2 ===
-  === checking 0c1445abb33d ===
-  === checking 65eb34ffc3a8 ===
   === checking 2dc09a01254d ===
   === checking bebd167eb94d ===
   === checking c8d03c1b5e94 ===
+  === checking 0c1445abb33d ===
+  === checking 65eb34ffc3a8 ===
   === checking 07c648efceeb ===
   === checking c81423bf5a24 ===
   === checking 5ba9a53052ed ===
@@ -612,14 +612,25 @@
   === checking 39bab1cb1cbe ===
   === checking 55bf3fdb634f ===
   === checking 3e1560705803 ===
+  === checking 17b6e6bac221 ===
+  === checking 5ce588c2b7c5 ===
+  === checking f2bdd828a3aa ===
+  === checking a457569c5306 ===
+  === checking ad46a4a0fc10 ===
+  === checking b115c694654e ===
+  === checking 673f5499c8c2 ===
+  === checking 900dd066a072 ===
+  === checking 97ac964e34b7 ===
+  === checking 0d153e3ad632 ===
+  === checking c37e7cd9f2bd ===
+  === checking 9a67238ad1c4 ===
   === checking 9729470d9329 ===
   === checking 884936b34999 ===
-  === checking b115c694654e ===
-  === checking 8ecb28746ec4 ===
   === checking de05b9c29ec7 ===
-  === checking d917f77a6439 ===
-  === checking c3c7fa726f88 ===
-  === checking 97d19fc5236f ===
+  === checking d99e0f7dad5b ===
+  === checking e4cfd6264623 ===
+  === checking fac9e582edd1 ===
+  === checking 89a0fe204177 ===
   === checking 4f5078f7da8a ===
   === checking 2bd677d0f13a ===
   === checking 3bdb00d5c818 ===
@@ -629,26 +640,15 @@
   === checking 2ea3fbf151b5 ===
   === checking 47c836a1f13e ===
   === checking 722d1b8b8942 ===
-  === checking 17b6e6bac221 ===
-  === checking 5ce588c2b7c5 ===
-  === checking f2bdd828a3aa ===
-  === checking a457569c5306 ===
-  === checking ad46a4a0fc10 ===
   === checking 4b39f229a0ce ===
   === checking d94da36be176 ===
   === checking eed373b0090d ===
+  === checking b3cf98c3d587 ===
+  === checking 8ecb28746ec4 ===
+  === checking d917f77a6439 ===
+  === checking c3c7fa726f88 ===
+  === checking 97d19fc5236f ===
   === checking 2472d042ec95 ===
-  === checking 673f5499c8c2 ===
-  === checking 900dd066a072 ===
-  === checking 97ac964e34b7 ===
-  === checking 0d153e3ad632 ===
-  === checking c37e7cd9f2bd ===
-  === checking 9a67238ad1c4 ===
-  === checking d99e0f7dad5b ===
-  === checking e4cfd6264623 ===
-  === checking fac9e582edd1 ===
-  === checking 89a0fe204177 ===
-  === checking b3cf98c3d587 ===
   === checking 041e1188f5f1 ===
   === checking 0484d39906c8 ===
   === checking 5eec91b12a58 ===
@@ -661,17 +661,22 @@
   === checking d6c9e2d27f14 ===
   === checking 37ad3ab0cddf ===
   === checking c7d3029bf731 ===
-  === checking 1f4a19f83a29 ===
-  === checking 43fc0b77ff07 ===
-  === checking 31d7b43cc321 ===
-  === checking c713eae2d31f ===
   === checking 76151e8066e1 ===
   === checking c7c1497fc270 ===
   === checking e7135b665740 ===
+  === checking c713eae2d31f ===
   === checking 82238c0bc950 ===
+  === checking 43fc0b77ff07 ===
+  === checking 1f4a19f83a29 ===
+  === checking 31d7b43cc321 ===
   === checking dbde319d43a3 ===
   === checking 8b79544bb56d ===
   === checking 721ba7c5f4ff ===
+  === checking 0bab31f71a21 ===
+  === checking 40553f55397e ===
+  === checking e3e6738c56ce ===
+  === checking 790cdfecd168 ===
+  === checking 469c700e9ed8 ===
   === checking 01e29e20ea3f ===
   === checking 32b41ca704e1 ===
   === checking 88714f4125cb ===
@@ -682,17 +687,23 @@
   === checking b33fd5ad4c0c ===
   === checking cd345198cf12 ===
   === checking 28be96b80dc1 ===
-  === checking 0bab31f71a21 ===
-  === checking 40553f55397e ===
-  === checking e3e6738c56ce ===
-  === checking 790cdfecd168 ===
-  === checking 469c700e9ed8 ===
   === checking 8ae32c3ed670 ===
   === checking 84d6ec6a8e21 ===
   === checking 01f771406cab ===
   $ hg showsort --rev 'Cfinal' --limit 72
-  c3c7fa726f88
-  97d19fc5236f
+  673f5499c8c2
+  900dd066a072
+  97ac964e34b7
+  0d153e3ad632
+  c37e7cd9f2bd
+  9a67238ad1c4
+  9729470d9329
+  884936b34999
+  de05b9c29ec7
+  d99e0f7dad5b
+  e4cfd6264623
+  fac9e582edd1
+  89a0fe204177
   4f5078f7da8a
   2bd677d0f13a
   3bdb00d5c818
@@ -702,26 +713,15 @@
   2ea3fbf151b5
   47c836a1f13e
   722d1b8b8942
-  17b6e6bac221
-  5ce588c2b7c5
-  f2bdd828a3aa
-  a457569c5306
-  ad46a4a0fc10
   4b39f229a0ce
   d94da36be176
   eed373b0090d
+  b3cf98c3d587
+  8ecb28746ec4
+  d917f77a6439
+  c3c7fa726f88
+  97d19fc5236f
   2472d042ec95
-  673f5499c8c2
-  900dd066a072
-  97ac964e34b7
-  0d153e3ad632
-  c37e7cd9f2bd
-  9a67238ad1c4
-  d99e0f7dad5b
-  e4cfd6264623
-  fac9e582edd1
-  89a0fe204177
-  b3cf98c3d587
   041e1188f5f1
   0484d39906c8
   5eec91b12a58
@@ -734,17 +734,22 @@
   d6c9e2d27f14
   37ad3ab0cddf
   c7d3029bf731
-  1f4a19f83a29
-  43fc0b77ff07
-  31d7b43cc321
-  c713eae2d31f
   76151e8066e1
   c7c1497fc270
   e7135b665740
+  c713eae2d31f
   82238c0bc950
+  43fc0b77ff07
+  1f4a19f83a29
+  31d7b43cc321
   dbde319d43a3
   8b79544bb56d
   721ba7c5f4ff
+  0bab31f71a21
+  40553f55397e
+  e3e6738c56ce
+  790cdfecd168
+  469c700e9ed8
   01e29e20ea3f
   32b41ca704e1
   88714f4125cb
@@ -755,11 +760,6 @@
   b33fd5ad4c0c
   cd345198cf12
   28be96b80dc1
-  0bab31f71a21
-  40553f55397e
-  e3e6738c56ce
-  790cdfecd168
-  469c700e9ed8
   8ae32c3ed670
   84d6ec6a8e21
   01f771406cab
@@ -768,17 +768,22 @@
   d6c9e2d27f14
   37ad3ab0cddf
   c7d3029bf731
-  1f4a19f83a29
-  43fc0b77ff07
-  31d7b43cc321
-  c713eae2d31f
   76151e8066e1
   c7c1497fc270
   e7135b665740
+  c713eae2d31f
   82238c0bc950
+  43fc0b77ff07
+  1f4a19f83a29
+  31d7b43cc321
   dbde319d43a3
   8b79544bb56d
   721ba7c5f4ff
+  0bab31f71a21
+  40553f55397e
+  e3e6738c56ce
+  790cdfecd168
+  469c700e9ed8
   01e29e20ea3f
   32b41ca704e1
   88714f4125cb
@@ -789,16 +794,11 @@
   b33fd5ad4c0c
   cd345198cf12
   28be96b80dc1
-  0bab31f71a21
-  40553f55397e
-  e3e6738c56ce
-  790cdfecd168
-  469c700e9ed8
   8ae32c3ed670
   84d6ec6a8e21
   01f771406cab
   $ hg showsort --rev 'Cfinal' --limit 4
-  469c700e9ed8
+  28be96b80dc1
   8ae32c3ed670
   84d6ec6a8e21
   01f771406cab
@@ -828,18 +828,18 @@
 
   $ hg showsort --rev 'all()' > ../crisscross.random.order
   $ python "$RUNTESTDIR/md5sum.py" ../crisscross.*.order
-  56271e05099a227fc7c0d6a434c24f0e  ../crisscross.random.order
-  56271e05099a227fc7c0d6a434c24f0e  ../crisscross.source.order
+  0ace2b2a63ec70b3b63b661aaee69878  ../crisscross.random.order
+  0ace2b2a63ec70b3b63b661aaee69878  ../crisscross.source.order
   $ diff -u ../crisscross.*.order
   $ hg showsort --rev 'all()'
   1ea73414a91b
   66f7d451a68b
   01241442b3c2
-  0c1445abb33d
-  65eb34ffc3a8
   2dc09a01254d
   bebd167eb94d
   c8d03c1b5e94
+  0c1445abb33d
+  65eb34ffc3a8
   07c648efceeb
   c81423bf5a24
   5ba9a53052ed
@@ -849,14 +849,25 @@
   39bab1cb1cbe
   55bf3fdb634f
   3e1560705803
+  17b6e6bac221
+  5ce588c2b7c5
+  f2bdd828a3aa
+  a457569c5306
+  ad46a4a0fc10
+  b115c694654e
+  673f5499c8c2
+  900dd066a072
+  97ac964e34b7
+  0d153e3ad632
+  c37e7cd9f2bd
+  9a67238ad1c4
   9729470d9329
   884936b34999
-  b115c694654e
-  8ecb28746ec4
   de05b9c29ec7
-  d917f77a6439
-  c3c7fa726f88
-  97d19fc5236f
+  d99e0f7dad5b
+  e4cfd6264623
+  fac9e582edd1
+  89a0fe204177
   4f5078f7da8a
   2bd677d0f13a
   3bdb00d5c818
@@ -866,26 +877,15 @@
   2ea3fbf151b5
   47c836a1f13e
   722d1b8b8942
-  17b6e6bac221
-  5ce588c2b7c5
-  f2bdd828a3aa
-  a457569c5306
-  ad46a4a0fc10
   4b39f229a0ce
   d94da36be176
   eed373b0090d
+  b3cf98c3d587
+  8ecb28746ec4
+  d917f77a6439
+  c3c7fa726f88
+  97d19fc5236f
   2472d042ec95
-  673f5499c8c2
-  900dd066a072
-  97ac964e34b7
-  0d153e3ad632
-  c37e7cd9f2bd
-  9a67238ad1c4
-  d99e0f7dad5b
-  e4cfd6264623
-  fac9e582edd1
-  89a0fe204177
-  b3cf98c3d587
   041e1188f5f1
   0484d39906c8
   5eec91b12a58
@@ -898,17 +898,22 @@
   d6c9e2d27f14
   37ad3ab0cddf
   c7d3029bf731
-  1f4a19f83a29
-  43fc0b77ff07
-  31d7b43cc321
-  c713eae2d31f
   76151e8066e1
   c7c1497fc270
   e7135b665740
+  c713eae2d31f
   82238c0bc950
+  43fc0b77ff07
+  1f4a19f83a29
+  31d7b43cc321
   dbde319d43a3
   8b79544bb56d
   721ba7c5f4ff
+  0bab31f71a21
+  40553f55397e
+  e3e6738c56ce
+  790cdfecd168
+  469c700e9ed8
   01e29e20ea3f
   32b41ca704e1
   88714f4125cb
@@ -919,11 +924,6 @@
   b33fd5ad4c0c
   cd345198cf12
   28be96b80dc1
-  0bab31f71a21
-  40553f55397e
-  e3e6738c56ce
-  790cdfecd168
-  469c700e9ed8
   8ae32c3ed670
   84d6ec6a8e21
   01f771406cab
--- a/tests/test-stablesort.t	Wed Dec 20 13:41:33 2017 +0100
+++ b/tests/test-stablesort.t	Wed Dec 20 16:20:26 2017 +0100
@@ -117,14 +117,14 @@
   4c748ffd1a46
   f0f3ef9a6cd5
   1d8d22637c2d
-  2702dd0c91e7
-  bab5d5bf48bd
-  b4594d867745
   e7d9710d9fc6
   d62d843c9a01
   dcbb326fdec2
+  ff43616e5d0f
+  bab5d5bf48bd
+  b4594d867745
   e46a4836065c
-  ff43616e5d0f
+  2702dd0c91e7
   $ hg showsorthead --rev 1d8d22637c2d
   1ea73414a91b
   66f7d451a68b
@@ -214,14 +214,14 @@
   === checking 4c748ffd1a46 ===
   === checking f0f3ef9a6cd5 ===
   === checking 1d8d22637c2d ===
-  === checking 2702dd0c91e7 ===
-  === checking bab5d5bf48bd ===
-  === checking b4594d867745 ===
   === checking e7d9710d9fc6 ===
   === checking d62d843c9a01 ===
   === checking dcbb326fdec2 ===
+  === checking ff43616e5d0f ===
+  === checking bab5d5bf48bd ===
+  === checking b4594d867745 ===
   === checking e46a4836065c ===
-  === checking ff43616e5d0f ===
+  === checking 2702dd0c91e7 ===
 
 Check stability
 ===============
@@ -482,10 +482,10 @@
   D
 
   $ python "$RUNTESTDIR/md5sum.py" *.all.order
-  4f54f623da142833149055fb83022a7e  A.all.order
-  4f54f623da142833149055fb83022a7e  B.all.order
-  4f54f623da142833149055fb83022a7e  C.all.order
-  4f54f623da142833149055fb83022a7e  D.all.order
+  25e89e555b56ed9e7b51827d58073b77  A.all.order
+  25e89e555b56ed9e7b51827d58073b77  B.all.order
+  25e89e555b56ed9e7b51827d58073b77  C.all.order
+  25e89e555b56ed9e7b51827d58073b77  D.all.order
 
 one specific head
 
@@ -716,17 +716,17 @@
   66f7d451a68b
   01241442b3c2
   2dc09a01254d
-  abf57d94268b
-  529dfc5bb875
   e7bd5218ca15
-  6ee532b68cfa
-  001194dd78d5
   3a367db1fabc
   a2f58e9c1e56
   5f18015f9110
   9fff0871d230
   4dbf739dd63f
   d64d500024d1
+  abf57d94268b
+  529dfc5bb875
+  6ee532b68cfa
+  001194dd78d5
   0496f0a6a143
   1c645e73dbc6
   160a7a0adbf4
@@ -738,25 +738,25 @@
   66f7d451a68b
   01241442b3c2
   2dc09a01254d
-  abf57d94268b
-  529dfc5bb875
   e7bd5218ca15
-  6ee532b68cfa
-  001194dd78d5
   3a367db1fabc
   a2f58e9c1e56
   5f18015f9110
   9fff0871d230
   4dbf739dd63f
   d64d500024d1
+  abf57d94268b
+  529dfc5bb875
+  6ee532b68cfa
+  001194dd78d5
   0496f0a6a143
   1c645e73dbc6
   160a7a0adbf4
   $ hg showsorthead --rev '160a7a0adbf4' --limit 7
-  5f18015f9110
-  9fff0871d230
-  4dbf739dd63f
-  d64d500024d1
+  abf57d94268b
+  529dfc5bb875
+  6ee532b68cfa
+  001194dd78d5
   0496f0a6a143
   1c645e73dbc6
   160a7a0adbf4
@@ -789,17 +789,17 @@
   === checking 66f7d451a68b ===
   === checking 01241442b3c2 ===
   === checking 2dc09a01254d ===
-  === checking abf57d94268b ===
-  === checking 529dfc5bb875 ===
   === checking e7bd5218ca15 ===
-  === checking 6ee532b68cfa ===
-  === checking 001194dd78d5 ===
   === checking 3a367db1fabc ===
   === checking a2f58e9c1e56 ===
   === checking 5f18015f9110 ===
   === checking 9fff0871d230 ===
   === checking 4dbf739dd63f ===
   === checking d64d500024d1 ===
+  === checking abf57d94268b ===
+  === checking 529dfc5bb875 ===
+  === checking 6ee532b68cfa ===
+  === checking 001194dd78d5 ===
   === checking 0496f0a6a143 ===
   === checking 1c645e73dbc6 ===
   === checking 160a7a0adbf4 ===
@@ -831,11 +831,11 @@
   $ hg showsorthead --rev '160a7a0adbf4' > ../160a7a0adbf4.random.orderhead
   $ hg showsorthead --rev '4bbfc6078919' > ../4bbfc6078919.random.orderhead
   $ python "$RUNTESTDIR/md5sum.py" ../multiple.*.order
-  a6547220a9f004c975e365d9561639dd  ../multiple.random.order
-  a6547220a9f004c975e365d9561639dd  ../multiple.source.order
+  19b28a58af0311b99159f60944a57213  ../multiple.random.order
+  19b28a58af0311b99159f60944a57213  ../multiple.source.order
   $ python "$RUNTESTDIR/md5sum.py" ../160a7a0adbf4.*.orderhead
-  48d8911f53869b32e29da26c56e95119  ../160a7a0adbf4.random.orderhead
-  48d8911f53869b32e29da26c56e95119  ../160a7a0adbf4.source.orderhead
+  905b0bab9155f65ed2e220382b94e9b9  ../160a7a0adbf4.random.orderhead
+  905b0bab9155f65ed2e220382b94e9b9  ../160a7a0adbf4.source.orderhead
   $ python "$RUNTESTDIR/md5sum.py" ../4bbfc6078919.*.orderhead
   3732305a333d59ec50b91db0f5ab696e  ../4bbfc6078919.random.orderhead
   3732305a333d59ec50b91db0f5ab696e  ../4bbfc6078919.source.orderhead
@@ -844,17 +844,17 @@
   66f7d451a68b
   01241442b3c2
   2dc09a01254d
-  abf57d94268b
-  529dfc5bb875
   e7bd5218ca15
-  6ee532b68cfa
-  001194dd78d5
   3a367db1fabc
   a2f58e9c1e56
   5f18015f9110
   9fff0871d230
   4dbf739dd63f
   d64d500024d1
+  abf57d94268b
+  529dfc5bb875
+  6ee532b68cfa
+  001194dd78d5
   0496f0a6a143
   1c645e73dbc6
   160a7a0adbf4
@@ -866,17 +866,17 @@
   66f7d451a68b
   01241442b3c2
   2dc09a01254d
-  abf57d94268b
-  529dfc5bb875
   e7bd5218ca15
-  6ee532b68cfa
-  001194dd78d5
   3a367db1fabc
   a2f58e9c1e56
   5f18015f9110
   9fff0871d230
   4dbf739dd63f
   d64d500024d1
+  abf57d94268b
+  529dfc5bb875
+  6ee532b68cfa
+  001194dd78d5
   0496f0a6a143
   1c645e73dbc6
   160a7a0adbf4
@@ -1044,6 +1044,18 @@
   56526aefbff4 23
   $ hg showsort --rev 'tip'
   1ea73414a91b
+  7cc044fdf4a7
+  e5c0d969abc4
+  ee222cc71ce6
+  448a7ac3ab1f
+  5cb8e6902ff3
+  191bac7bf37c
+  5188cf52b7b7
+  65e683dd6db4
+  4442c125b80d
+  5648bbf0e38b
+  6a97ef856f90
+  d4422659bc40
   66f7d451a68b
   01241442b3c2
   2dc09a01254d
@@ -1053,6 +1065,9 @@
   bebd167eb94d
   c8d03c1b5e94
   9f6c364a3574
+  56526aefbff4
+  $ hg showsorthead --rev 'tip'
+  1ea73414a91b
   7cc044fdf4a7
   e5c0d969abc4
   ee222cc71ce6
@@ -1065,9 +1080,6 @@
   5648bbf0e38b
   6a97ef856f90
   d4422659bc40
-  56526aefbff4
-  $ hg showsorthead --rev 'tip'
-  1ea73414a91b
   66f7d451a68b
   01241442b3c2
   2dc09a01254d
@@ -1077,42 +1089,30 @@
   bebd167eb94d
   c8d03c1b5e94
   9f6c364a3574
-  7cc044fdf4a7
-  e5c0d969abc4
-  ee222cc71ce6
-  448a7ac3ab1f
-  5cb8e6902ff3
-  191bac7bf37c
-  5188cf52b7b7
-  65e683dd6db4
-  4442c125b80d
-  5648bbf0e38b
-  6a97ef856f90
-  d4422659bc40
   56526aefbff4
   $ hg showsorthead --rev 'tip' --limit 12
-  e5c0d969abc4
-  ee222cc71ce6
-  448a7ac3ab1f
-  5cb8e6902ff3
-  191bac7bf37c
-  5188cf52b7b7
-  65e683dd6db4
-  4442c125b80d
-  5648bbf0e38b
   6a97ef856f90
   d4422659bc40
+  66f7d451a68b
+  01241442b3c2
+  2dc09a01254d
+  c2c595bcd4c6
+  e2317cea05f7
+  588f0bc87ecd
+  bebd167eb94d
+  c8d03c1b5e94
+  9f6c364a3574
   56526aefbff4
   $ hg showsorthead --rev 'tip' --limit 7
-  5188cf52b7b7
-  65e683dd6db4
-  4442c125b80d
-  5648bbf0e38b
-  6a97ef856f90
-  d4422659bc40
+  c2c595bcd4c6
+  e2317cea05f7
+  588f0bc87ecd
+  bebd167eb94d
+  c8d03c1b5e94
+  9f6c364a3574
   56526aefbff4
   $ hg showsorthead --rev 'tip' --limit 3
-  6a97ef856f90
-  d4422659bc40
+  c8d03c1b5e94
+  9f6c364a3574
   56526aefbff4
   $ cd ..