evolve: create a new commit instead of amending one of the divergents
This patch changes the behavior of evolve command while resolving
content-divergence to create a new commit instead of amending one of the
divergent ones.
In past, I have made this change, backed out this change and now today again I
am doing this change, so let's dive in some history.
Using cmdrewrite.amend() was never a good option as that requires hack to delete
the evolvestate and also gives us less control over things. We can't make the
commit on top of different parents as that of content-divergent ones. Due to all
these, I first made this change to create a new commit instead of amending one.
But, after few days, there was flakiness observed in the tests and turned out
that we need to do some dirstate dance as repo.dirstate.setparents() does not
always fix the dirstate. That flakiness was a blocker for progress at that time
and we decided to switch to amend back so that we can have things working with
some hacks and we can later fix the implementation part.
Now, yesterday while tackling resolving content-divergence of a stack which is
as follows:
C1 C2
| |
B1 B2
| |
A1 A2
\/
base
where, A1-A2, B1-B2, C1-C2 are content-divergent with each other. Now we can
resolve A1-A2 very well because they have the same parent and let's say that
resolution leads to A3.
Now, we want to resolve B1-B2 and make the new resolution commit on top of A3 so
that we can end up something like:
C3
|
B3
|
A3
|
base
however, amending one of the divergent changesets, it's not possible to create a
commit on a different parent like A3 here without some relocation. We should
prevent relocation as that may leads to some conflicts and should change the
parent before committing.
So, looking ahead, we can't move with using amend as still using that we will
need some relocation hacks making code ugly and prone to bad behaviors, bugs.
Let's change back to creating a new commit so that we can move forward in a good
way.
About repo.dirstate.setparents() not setting the dirstate, I have researched
yesterday night about how we can do that and found out that we can use
cmdrewrite._uncommitdirstate() here. Expect upcoming patches to improve the
documentation of that function.
There are lot of test changes because of change in hash but there is no behavior
change. The only behavior change is in test-evolve-abort-contentdiv.t which is
nice because creating a new commit helps us in stripping that while aborting.
We have a lot of testing of content-divergence and no behavior change gives
enough confidence for making this change.
I reviewed the patch carefully to make sure there is no behavior change and I
suggest reviewer to do the same.
Test for stable ordering capabilities
=====================================
$ . $TESTDIR/testlib/pythonpath.sh
$ cat << EOF >> $HGRCPATH
> [extensions]
> hgext3rd.evolve =
> [ui]
> logtemplate = "{rev} {node|short} {desc} {tags}\n"
> [defaults]
> debugstablerange = --method branchpoint
> EOF
Simple linear test
==================
$ hg init repo_linear
$ cd repo_linear
$ hg debugbuilddag '.+6'
$ hg debugdepth -r 'all()'
1ea73414a91b 1
66f7d451a68b 2
01241442b3c2 3
2dc09a01254d 4
bebd167eb94d 5
c8d03c1b5e94 6
f69452c5b1af 7
$ hg debugstablerange --verify --verbose --subranges --rev 1
66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
1ea73414a91b-0 (0, 1, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 1 > 1.range
bigger subset reuse most of the previous one
$ hg debugstablerange --verify --verbose --subranges --rev 4
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)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 4 > 4.range
$ diff -u 1.range 4.range
--- 1.range * (glob)
+++ 4.range * (glob)
@@ -1,3 +1,9 @@
+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)
+01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
+2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
+bebd167eb94d-4 (4, 5, 1) [leaf] -
[1]
Using a range not ending on 2**N boundary
we fall back on 2**N as much as possible
$ hg debugstablerange --verify --verbose --subranges --rev 5
c8d03c1b5e94-0 (5, 6, 6) [complete] - 2dc09a01254d-0 (3, 4, 4), c8d03c1b5e94-4 (5, 6, 2)
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)
c8d03c1b5e94-4 (5, 6, 2) [complete] - bebd167eb94d-4 (4, 5, 1), c8d03c1b5e94-5 (5, 6, 1)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
c8d03c1b5e94-5 (5, 6, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 5 > 5.range
$ diff -u 4.range 5.range
--- 4.range * (glob)
+++ 5.range * (glob)
@@ -1,9 +1,11 @@
-bebd167eb94d-0 (4, 5, 5) [complete] - 2dc09a01254d-0 (3, 4, 4), bebd167eb94d-4 (4, 5, 1)
+c8d03c1b5e94-0 (5, 6, 6) [complete] - 2dc09a01254d-0 (3, 4, 4), c8d03c1b5e94-4 (5, 6, 2)
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)
+c8d03c1b5e94-4 (5, 6, 2) [complete] - bebd167eb94d-4 (4, 5, 1), c8d03c1b5e94-5 (5, 6, 1)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
+c8d03c1b5e94-5 (5, 6, 1) [leaf] -
[1]
Even two unperfect range overlap a lot
$ hg debugstablerange --verify --verbose --subranges --rev tip
f69452c5b1af-0 (6, 7, 7) [complete] - 2dc09a01254d-0 (3, 4, 4), f69452c5b1af-4 (6, 7, 3)
2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
f69452c5b1af-4 (6, 7, 3) [complete] - c8d03c1b5e94-4 (5, 6, 2), f69452c5b1af-6 (6, 7, 1)
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)
c8d03c1b5e94-4 (5, 6, 2) [complete] - bebd167eb94d-4 (4, 5, 1), c8d03c1b5e94-5 (5, 6, 1)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
c8d03c1b5e94-5 (5, 6, 1) [leaf] -
f69452c5b1af-6 (6, 7, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev tip > tip.range
$ diff -u 5.range tip.range
--- 5.range * (glob)
+++ tip.range * (glob)
@@ -1,5 +1,6 @@
-c8d03c1b5e94-0 (5, 6, 6) [complete] - 2dc09a01254d-0 (3, 4, 4), c8d03c1b5e94-4 (5, 6, 2)
+f69452c5b1af-0 (6, 7, 7) [complete] - 2dc09a01254d-0 (3, 4, 4), f69452c5b1af-4 (6, 7, 3)
2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
+f69452c5b1af-4 (6, 7, 3) [complete] - c8d03c1b5e94-4 (5, 6, 2), f69452c5b1af-6 (6, 7, 1)
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)
c8d03c1b5e94-4 (5, 6, 2) [complete] - bebd167eb94d-4 (4, 5, 1), c8d03c1b5e94-5 (5, 6, 1)
@@ -9,3 +10,4 @@
66f7d451a68b-1 (1, 2, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
c8d03c1b5e94-5 (5, 6, 1) [leaf] -
+f69452c5b1af-6 (6, 7, 1) [leaf] -
[1]
$ cd ..
Case with merge
===============
Simple case: branching is on a boundary
--------------------------------------------
$ hg init repo_merge_split_on_boundary
$ cd repo_merge_split_on_boundary
$ hg debugbuilddag '.:base
> +3:left
> <base+3:right
> <left/right:merge
> +2:head
> '
$ hg log -G
o 9 0338daf18215 r9 head tip
|
o 8 71b32fcf3f71 r8
|
o 7 5f18015f9110 r7 merge
|\
| o 6 a2f58e9c1e56 r6 right
| |
| o 5 3a367db1fabc r5
| |
| o 4 e7bd5218ca15 r4
| |
o | 3 2dc09a01254d r3 left
| |
o | 2 01241442b3c2 r2
| |
o | 1 66f7d451a68b r1
|/
o 0 1ea73414a91b r0 base
$ hg debugdepth -r 'all()'
1ea73414a91b 1
66f7d451a68b 2
01241442b3c2 3
2dc09a01254d 4
e7bd5218ca15 2
3a367db1fabc 3
a2f58e9c1e56 4
5f18015f9110 8
71b32fcf3f71 9
0338daf18215 10
Each of the linear branch reuse range internally
(left branch)
$ hg debugstablerange --verify --verbose --subranges --rev 'left~2'
66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
1ea73414a91b-0 (0, 1, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'left~2' > left-2.range
$ hg debugstablerange --verify --verbose --subranges --rev left
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)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'left' > left.range
$ diff -u left-2.range left.range
--- left-2.range * (glob)
+++ left.range * (glob)
@@ -1,3 +1,7 @@
+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)
+01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
+2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
[1]
(right branch)
$ hg debugstablerange --verify --verbose --subranges --rev right~2
e7bd5218ca15-0 (4, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), e7bd5218ca15-1 (4, 2, 1)
1ea73414a91b-0 (0, 1, 1) [leaf] -
e7bd5218ca15-1 (4, 2, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'right~2' > right-2.range
$ hg debugstablerange --verify --verbose --subranges --rev right
a2f58e9c1e56-0 (6, 4, 4) [complete] - e7bd5218ca15-0 (4, 2, 2), a2f58e9c1e56-2 (6, 4, 2)
a2f58e9c1e56-2 (6, 4, 2) [complete] - 3a367db1fabc-2 (5, 3, 1), a2f58e9c1e56-3 (6, 4, 1)
e7bd5218ca15-0 (4, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), e7bd5218ca15-1 (4, 2, 1)
1ea73414a91b-0 (0, 1, 1) [leaf] -
3a367db1fabc-2 (5, 3, 1) [leaf] -
a2f58e9c1e56-3 (6, 4, 1) [leaf] -
e7bd5218ca15-1 (4, 2, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'right' > right.range
$ diff -u right-2.range right.range
--- right-2.range * (glob)
+++ right.range * (glob)
@@ -1,3 +1,7 @@
+a2f58e9c1e56-0 (6, 4, 4) [complete] - e7bd5218ca15-0 (4, 2, 2), a2f58e9c1e56-2 (6, 4, 2)
+a2f58e9c1e56-2 (6, 4, 2) [complete] - 3a367db1fabc-2 (5, 3, 1), a2f58e9c1e56-3 (6, 4, 1)
e7bd5218ca15-0 (4, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), e7bd5218ca15-1 (4, 2, 1)
1ea73414a91b-0 (0, 1, 1) [leaf] -
+3a367db1fabc-2 (5, 3, 1) [leaf] -
+a2f58e9c1e56-3 (6, 4, 1) [leaf] -
e7bd5218ca15-1 (4, 2, 1) [leaf] -
[1]
The merge reuse as much of the slicing created for one of the branch
$ hg debugstablerange --verify --verbose --subranges --rev merge
5f18015f9110-0 (7, 8, 8) [complete] - 2dc09a01254d-0 (3, 4, 4), 5f18015f9110-4 (7, 8, 4)
2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
5f18015f9110-4 (7, 8, 4) [complete] - 3a367db1fabc-1 (5, 3, 2), 5f18015f9110-6 (7, 8, 2)
2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
3a367db1fabc-1 (5, 3, 2) [complete] - e7bd5218ca15-1 (4, 2, 1), 3a367db1fabc-2 (5, 3, 1)
5f18015f9110-6 (7, 8, 2) [complete] - a2f58e9c1e56-3 (6, 4, 1), 5f18015f9110-7 (7, 8, 1)
66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
3a367db1fabc-2 (5, 3, 1) [leaf] -
5f18015f9110-7 (7, 8, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
a2f58e9c1e56-3 (6, 4, 1) [leaf] -
e7bd5218ca15-1 (4, 2, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'merge' > merge.range
$ diff -u left.range merge.range
--- left.range * (glob)
+++ merge.range * (glob)
@@ -1,7 +1,15 @@
+5f18015f9110-0 (7, 8, 8) [complete] - 2dc09a01254d-0 (3, 4, 4), 5f18015f9110-4 (7, 8, 4)
2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
+5f18015f9110-4 (7, 8, 4) [complete] - 3a367db1fabc-1 (5, 3, 2), 5f18015f9110-6 (7, 8, 2)
2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
+3a367db1fabc-1 (5, 3, 2) [complete] - e7bd5218ca15-1 (4, 2, 1), 3a367db1fabc-2 (5, 3, 1)
+5f18015f9110-6 (7, 8, 2) [complete] - a2f58e9c1e56-3 (6, 4, 1), 5f18015f9110-7 (7, 8, 1)
66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
+3a367db1fabc-2 (5, 3, 1) [leaf] -
+5f18015f9110-7 (7, 8, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
+a2f58e9c1e56-3 (6, 4, 1) [leaf] -
+e7bd5218ca15-1 (4, 2, 1) [leaf] -
[1]
$ diff -u right.range merge.range
--- right.range * (glob)
+++ merge.range * (glob)
@@ -1,7 +1,15 @@
-a2f58e9c1e56-0 (6, 4, 4) [complete] - e7bd5218ca15-0 (4, 2, 2), a2f58e9c1e56-2 (6, 4, 2)
-a2f58e9c1e56-2 (6, 4, 2) [complete] - 3a367db1fabc-2 (5, 3, 1), a2f58e9c1e56-3 (6, 4, 1)
-e7bd5218ca15-0 (4, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), e7bd5218ca15-1 (4, 2, 1)
+5f18015f9110-0 (7, 8, 8) [complete] - 2dc09a01254d-0 (3, 4, 4), 5f18015f9110-4 (7, 8, 4)
+2dc09a01254d-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2dc09a01254d-2 (3, 4, 2)
+5f18015f9110-4 (7, 8, 4) [complete] - 3a367db1fabc-1 (5, 3, 2), 5f18015f9110-6 (7, 8, 2)
+2dc09a01254d-2 (3, 4, 2) [complete] - 01241442b3c2-2 (2, 3, 1), 2dc09a01254d-3 (3, 4, 1)
+3a367db1fabc-1 (5, 3, 2) [complete] - e7bd5218ca15-1 (4, 2, 1), 3a367db1fabc-2 (5, 3, 1)
+5f18015f9110-6 (7, 8, 2) [complete] - a2f58e9c1e56-3 (6, 4, 1), 5f18015f9110-7 (7, 8, 1)
+66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
+01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
+2dc09a01254d-3 (3, 4, 1) [leaf] -
3a367db1fabc-2 (5, 3, 1) [leaf] -
+5f18015f9110-7 (7, 8, 1) [leaf] -
+66f7d451a68b-1 (1, 2, 1) [leaf] -
a2f58e9c1e56-3 (6, 4, 1) [leaf] -
e7bd5218ca15-1 (4, 2, 1) [leaf] -
[1]
$ cd ..
slice create multiple heads
---------------------------
$ hg init repo_merge_split_heads
$ cd repo_merge_split_heads
$ hg debugbuilddag '.:base
> +4:left
> <base+5:right
> <left/right:merge
> +2:head
> '
$ hg debugbuilddag '.:base
> +3:left
> <base+3:right
> <left/right:merge
> +2:head
> '
abort: repository is not empty
[255]
$ hg log -G
o 12 e6b8d5b46647 r12 head tip
|
o 11 485383494a89 r11
|
o 10 8aca7f8c9bd2 r10 merge
|\
| o 9 f4b7da68b467 r9 right
| |
| o 8 857477a9aebb r8
| |
| o 7 42b07e8da27d r7
| |
| o 6 b9bc20507e0b r6
| |
| o 5 de561312eff4 r5
| |
o | 4 bebd167eb94d r4 left
| |
o | 3 2dc09a01254d r3
| |
o | 2 01241442b3c2 r2
| |
o | 1 66f7d451a68b r1
|/
o 0 1ea73414a91b r0 base
$ hg debugdepth -r 'all()'
1ea73414a91b 1
66f7d451a68b 2
01241442b3c2 3
2dc09a01254d 4
bebd167eb94d 5
de561312eff4 2
b9bc20507e0b 3
42b07e8da27d 4
857477a9aebb 5
f4b7da68b467 6
8aca7f8c9bd2 11
485383494a89 12
e6b8d5b46647 13
Each of the linear branch reuse range internally
(left branch)
$ hg debugstablerange --verify --verbose --subranges --rev 'left~2'
01241442b3c2-0 (2, 3, 3) [complete] - 66f7d451a68b-0 (1, 2, 2), 01241442b3c2-2 (2, 3, 1)
66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'left~2' > left-2.range
$ hg debugstablerange --verify --verbose --subranges --rev left
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)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'left' > left.range
$ diff -u left-2.range left.range
--- left-2.range * (glob)
+++ left.range * (glob)
@@ -1,5 +1,9 @@
-01241442b3c2-0 (2, 3, 3) [complete] - 66f7d451a68b-0 (1, 2, 2), 01241442b3c2-2 (2, 3, 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)
01241442b3c2-2 (2, 3, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
+2dc09a01254d-3 (3, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
+bebd167eb94d-4 (4, 5, 1) [leaf] -
[1]
(right branch)
$ hg debugstablerange --verify --verbose --subranges --rev right~2
42b07e8da27d-0 (7, 4, 4) [complete] - de561312eff4-0 (5, 2, 2), 42b07e8da27d-2 (7, 4, 2)
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)
1ea73414a91b-0 (0, 1, 1) [leaf] -
42b07e8da27d-3 (7, 4, 1) [leaf] -
b9bc20507e0b-2 (6, 3, 1) [leaf] -
de561312eff4-1 (5, 2, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'right~2' > right-2.range
$ hg debugstablerange --verify --verbose --subranges --rev right
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)
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)
f4b7da68b467-4 (9, 6, 2) [complete] - 857477a9aebb-4 (8, 5, 1), f4b7da68b467-5 (9, 6, 1)
1ea73414a91b-0 (0, 1, 1) [leaf] -
42b07e8da27d-3 (7, 4, 1) [leaf] -
857477a9aebb-4 (8, 5, 1) [leaf] -
b9bc20507e0b-2 (6, 3, 1) [leaf] -
de561312eff4-1 (5, 2, 1) [leaf] -
f4b7da68b467-5 (9, 6, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'right' > right.range
$ diff -u right-2.range right.range
--- right-2.range * (glob)
+++ right.range * (glob)
@@ -1,7 +1,11 @@
+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)
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)
+f4b7da68b467-4 (9, 6, 2) [complete] - 857477a9aebb-4 (8, 5, 1), f4b7da68b467-5 (9, 6, 1)
1ea73414a91b-0 (0, 1, 1) [leaf] -
42b07e8da27d-3 (7, 4, 1) [leaf] -
+857477a9aebb-4 (8, 5, 1) [leaf] -
b9bc20507e0b-2 (6, 3, 1) [leaf] -
de561312eff4-1 (5, 2, 1) [leaf] -
+f4b7da68b467-5 (9, 6, 1) [leaf] -
[1]
In this case, the bottom of the split will have multiple heads,
So we'll create more than 1 subrange out of it.
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)
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)
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] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
42b07e8da27d-3 (7, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
857477a9aebb-4 (8, 5, 1) [leaf] -
8aca7f8c9bd2-10 (10, 11, 1) [leaf] -
b9bc20507e0b-2 (6, 3, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
de561312eff4-1 (5, 2, 1) [leaf] -
f4b7da68b467-5 (9, 6, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'merge' > merge.range
$ diff -u left.range merge.range
--- 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)
+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)
+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] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
+42b07e8da27d-3 (7, 4, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
+857477a9aebb-4 (8, 5, 1) [leaf] -
+8aca7f8c9bd2-10 (10, 11, 1) [leaf] -
+b9bc20507e0b-2 (6, 3, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
+de561312eff4-1 (5, 2, 1) [leaf] -
+f4b7da68b467-5 (9, 6, 1) [leaf] -
[1]
$ diff -u right.range merge.range
--- 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)
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)
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] -
+2dc09a01254d-3 (3, 4, 1) [leaf] -
42b07e8da27d-3 (7, 4, 1) [leaf] -
+66f7d451a68b-1 (1, 2, 1) [leaf] -
857477a9aebb-4 (8, 5, 1) [leaf] -
+8aca7f8c9bd2-10 (10, 11, 1) [leaf] -
b9bc20507e0b-2 (6, 3, 1) [leaf] -
+bebd167eb94d-4 (4, 5, 1) [leaf] -
de561312eff4-1 (5, 2, 1) [leaf] -
f4b7da68b467-5 (9, 6, 1) [leaf] -
[1]
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-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-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)
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] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
42b07e8da27d-3 (7, 4, 1) [leaf] -
485383494a89-11 (11, 12, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
857477a9aebb-4 (8, 5, 1) [leaf] -
8aca7f8c9bd2-10 (10, 11, 1) [leaf] -
b9bc20507e0b-2 (6, 3, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
de561312eff4-1 (5, 2, 1) [leaf] -
e6b8d5b46647-12 (12, 13, 1) [leaf] -
f4b7da68b467-5 (9, 6, 1) [leaf] -
$ hg debugstablerange --verify --verbose --subranges --rev 'tip' > tip.range
$ 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)
+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-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)
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] -
2dc09a01254d-3 (3, 4, 1) [leaf] -
42b07e8da27d-3 (7, 4, 1) [leaf] -
+485383494a89-11 (11, 12, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
857477a9aebb-4 (8, 5, 1) [leaf] -
8aca7f8c9bd2-10 (10, 11, 1) [leaf] -
b9bc20507e0b-2 (6, 3, 1) [leaf] -
bebd167eb94d-4 (4, 5, 1) [leaf] -
de561312eff4-1 (5, 2, 1) [leaf] -
+e6b8d5b46647-12 (12, 13, 1) [leaf] -
f4b7da68b467-5 (9, 6, 1) [leaf] -
[1]
$ cd ..
Tests range with criss cross merge in the graph
===============================================
$ hg init repo_criss_cross
$ cd repo_criss_cross
$ hg debugbuilddag '
> ..:g # 2 nodes, tagged "g"
> <2.:h # another node base one -2 -> 0, tagged "h"
> *1/2:m # merge -1 and -2 (1, 2), tagged "m"
> <2+2:i # 2 nodes based on -2, tag head as "i"
> .:c # 1 node tagged "c"
> <m+3:a # 3 nodes base on the "m" tag
> <2.:b # 1 node based on -2; tagged "b"
> <m+2:d # 2 nodes from "m" tagged "d"
> <2.:e # 1 node based on -2, tagged "e"
> <m+1:f # 1 node based on "m" tagged "f"
> <i/f # merge "i" and "f"
> '
$ hg log -G
o 15 1d8d22637c2d r15 tip
|\
| o 14 43227190fef8 r14 f
| |
| | o 13 b4594d867745 r13 e
| | |
| | | o 12 e46a4836065c r12 d
| | |/
| | o 11 bab5d5bf48bd r11
| |/
| | o 10 ff43616e5d0f r10 b
| | |
| | | o 9 dcbb326fdec2 r9 a
| | |/
| | o 8 d62d843c9a01 r8
| | |
| | o 7 e7d9710d9fc6 r7
| |/
+---o 6 2702dd0c91e7 r6 c
| |
o | 5 f0f3ef9a6cd5 r5 i
| |
o | 4 4c748ffd1a46 r4
| |
| o 3 2b6d669947cd r3 m
|/|
o | 2 fa942426a6fd r2 h
| |
| o 1 66f7d451a68b r1 g
|/
o 0 1ea73414a91b r0
$ hg debugdepth -r 'all()'
1ea73414a91b 1
66f7d451a68b 2
fa942426a6fd 2
2b6d669947cd 4
4c748ffd1a46 3
f0f3ef9a6cd5 4
2702dd0c91e7 5
e7d9710d9fc6 5
d62d843c9a01 6
dcbb326fdec2 7
ff43616e5d0f 7
bab5d5bf48bd 5
e46a4836065c 6
b4594d867745 6
43227190fef8 5
1d8d22637c2d 8
$ hg debugstablerange --verify --verbose --subranges --rev 'head()'
1d8d22637c2d-0 (15, 8, 8) [complete] - 2b6d669947cd-0 (3, 4, 4), 1d8d22637c2d-4 (15, 8, 4)
dcbb326fdec2-0 (9, 7, 7) [complete] - 2b6d669947cd-0 (3, 4, 4), dcbb326fdec2-4 (9, 7, 3)
ff43616e5d0f-0 (10, 7, 7) [complete] - 2b6d669947cd-0 (3, 4, 4), ff43616e5d0f-4 (10, 7, 3)
b4594d867745-0 (13, 6, 6) [complete] - 2b6d669947cd-0 (3, 4, 4), b4594d867745-4 (13, 6, 2)
e46a4836065c-0 (12, 6, 6) [complete] - 2b6d669947cd-0 (3, 4, 4), e46a4836065c-4 (12, 6, 2)
2702dd0c91e7-0 (6, 5, 5) [complete] - f0f3ef9a6cd5-0 (5, 4, 4), 2702dd0c91e7-4 (6, 5, 1)
1d8d22637c2d-4 (15, 8, 4) [complete] - 43227190fef8-4 (14, 5, 1), 4c748ffd1a46-2 (4, 3, 1), 1d8d22637c2d-6 (15, 8, 2)
2b6d669947cd-0 (3, 4, 4) [complete] - 66f7d451a68b-0 (1, 2, 2), 2b6d669947cd-2 (3, 4, 2)
f0f3ef9a6cd5-0 (5, 4, 4) [complete] - fa942426a6fd-0 (2, 2, 2), f0f3ef9a6cd5-2 (5, 4, 2)
dcbb326fdec2-4 (9, 7, 3) [complete] - d62d843c9a01-4 (8, 6, 2), dcbb326fdec2-6 (9, 7, 1)
ff43616e5d0f-4 (10, 7, 3) [complete] - d62d843c9a01-4 (8, 6, 2), ff43616e5d0f-6 (10, 7, 1)
1d8d22637c2d-6 (15, 8, 2) [complete] - f0f3ef9a6cd5-3 (5, 4, 1), 1d8d22637c2d-7 (15, 8, 1)
2b6d669947cd-2 (3, 4, 2) [complete] - fa942426a6fd-1 (2, 2, 1), 2b6d669947cd-3 (3, 4, 1)
66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
b4594d867745-4 (13, 6, 2) [complete] - bab5d5bf48bd-4 (11, 5, 1), b4594d867745-5 (13, 6, 1)
d62d843c9a01-4 (8, 6, 2) [complete] - e7d9710d9fc6-4 (7, 5, 1), d62d843c9a01-5 (8, 6, 1)
e46a4836065c-4 (12, 6, 2) [complete] - bab5d5bf48bd-4 (11, 5, 1), e46a4836065c-5 (12, 6, 1)
f0f3ef9a6cd5-2 (5, 4, 2) [complete] - 4c748ffd1a46-2 (4, 3, 1), f0f3ef9a6cd5-3 (5, 4, 1)
fa942426a6fd-0 (2, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), fa942426a6fd-1 (2, 2, 1)
1d8d22637c2d-7 (15, 8, 1) [leaf] -
1ea73414a91b-0 (0, 1, 1) [leaf] -
2702dd0c91e7-4 (6, 5, 1) [leaf] -
2b6d669947cd-3 (3, 4, 1) [leaf] -
43227190fef8-4 (14, 5, 1) [leaf] -
4c748ffd1a46-2 (4, 3, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
b4594d867745-5 (13, 6, 1) [leaf] -
bab5d5bf48bd-4 (11, 5, 1) [leaf] -
d62d843c9a01-5 (8, 6, 1) [leaf] -
dcbb326fdec2-6 (9, 7, 1) [leaf] -
e46a4836065c-5 (12, 6, 1) [leaf] -
e7d9710d9fc6-4 (7, 5, 1) [leaf] -
f0f3ef9a6cd5-3 (5, 4, 1) [leaf] -
fa942426a6fd-1 (2, 2, 1) [leaf] -
ff43616e5d0f-6 (10, 7, 1) [leaf] -
$ cd ..
Tests range where a toprange is rooted on a merge
=================================================
$ hg init slice_on_merge
$ cd slice_on_merge
$ hg debugbuilddag '
> ..:a # 2 nodes, tagged "a"
> <2..:b # another branch with two node based on 0, tagged b
> *a/b:m # merge -1 and -2 (1, 2), tagged "m"
> '
$ hg log -G
o 4 f37e476fba9a r4 m tip
|\
| o 3 36315563e2fa r3 b
| |
| o 2 fa942426a6fd r2
| |
o | 1 66f7d451a68b r1 a
|/
o 0 1ea73414a91b r0
$ hg debugdepth -r 'all()'
1ea73414a91b 1
66f7d451a68b 2
fa942426a6fd 2
36315563e2fa 3
f37e476fba9a 5
$ hg debugstablerange --verify --verbose --subranges --rev 'head()'
f37e476fba9a-0 (4, 5, 5) [complete] - 66f7d451a68b-0 (1, 2, 2), 36315563e2fa-1 (3, 3, 2), f37e476fba9a-4 (4, 5, 1)
36315563e2fa-1 (3, 3, 2) [complete] - fa942426a6fd-1 (2, 2, 1), 36315563e2fa-2 (3, 3, 1)
66f7d451a68b-0 (1, 2, 2) [complete] - 1ea73414a91b-0 (0, 1, 1), 66f7d451a68b-1 (1, 2, 1)
1ea73414a91b-0 (0, 1, 1) [leaf] -
36315563e2fa-2 (3, 3, 1) [leaf] -
66f7d451a68b-1 (1, 2, 1) [leaf] -
f37e476fba9a-4 (4, 5, 1) [leaf] -
fa942426a6fd-1 (2, 2, 1) [leaf] -