evolve: use cmdrewrite.amend() instead of creating a new commit
This patch backs out changeset 88601e1cd5d8.
We replaced cmdrewrite.amend() with creating new commit because using amend(), a
high level function was not good and creating a new commit gave us more control
over things.
**HOWEVER** to get more control, you need to get arrange all the pieces together
perfectly. Creating a new commit, the existing logic has some bugs around
dirstate handling, the `repo.dirstate.setparents()` call especially. Sometimes
this fixes the dirstate correctly sometimes not.
As Pierre-Yves David said, "Having a "clumsy" implementation with the right
behavior is usually a good first step. So having an amend based implementation
seems like a good first step.", let's take a step back and get back using amend
so that we can have a correct basic implementation which is bug free.
--- a/hgext3rd/evolve/evolvecmd.py Sun Jun 03 01:59:41 2018 +0530
+++ b/hgext3rd/evolve/evolvecmd.py Tue Jun 05 00:53:21 2018 +0530
@@ -33,6 +33,7 @@
from mercurial.i18n import _
from . import (
+ cmdrewrite,
compat,
exthelper,
rewriteutil,
@@ -446,23 +447,25 @@
tr = repo.currenttransaction()
assert tr is not None
try:
+ repo.ui.setconfig('ui', 'allowemptycommit', True, 'evolve')
with repo.dirstate.parentchange():
- repo.dirstate.setparents(divergent.p1().node(), node.nullid)
+ repo.dirstate.setparents(divergent.node(), node.nullid)
+ oldlen = len(repo)
+ # temporary hack because we can't use cmdrewrite.amend() during an
+ # interrupted evolve
+ evolvestate.delete()
- newnode = repo.commit(text=divergent.description(), user=repo.ui.username())
- if newnode == divergent.node() or newnode is None:
- # no changes
+ # XXX: we should not use amend here, rather create a new commit
+ cmdrewrite.amend(ui, repo, message='', logfile='')
+ # XXX: we can get rid of this len() call also by creating a new commit
+ if oldlen == len(repo):
new = divergent
- repo.ui.status(_("nothing changed\n"))
- hg.updaterepo(repo, divergent.rev(), False)
- obsolete.createmarkers(repo, [(other, (new,))], operation='evolve')
+ # no changes
else:
- new = repo[newnode]
- hg.updaterepo(repo, new.rev(), False)
- obsolete.createmarkers(repo, [(other, (new,))], operation='evolve')
- obsolete.createmarkers(repo, [(divergent, (new,))], operation='evolve')
+ new = repo['.']
# creating markers and moving phases post-resolution
+ obsolete.createmarkers(repo, [(other, (new,))], operation='evolve')
phases.retractboundary(repo, tr, other.phase(), [new.node()])
return (True, new.node())
finally:
--- a/tests/test-divergent.t Sun Jun 03 01:59:41 2018 +0530
+++ b/tests/test-divergent.t Tue Jun 05 00:53:21 2018 +0530
@@ -60,9 +60,9 @@
updating to "local" side of the conflict: c2f698071cba
merging "other" content-divergent changeset 'e708fd28d5cf'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- working directory is now at c9708170cf11
+ working directory is now at c26f1d3baed2
$ hg log -G
- @ 4:c9708170cf11@default(draft) add bdivergent1 []
+ @ 4:c26f1d3baed2@default(draft) add bdivergent1 []
|
o 0:135f39f4bd78@default(draft) add _a []
@@ -94,7 +94,7 @@
|
| * 6:26c7705fee96@default(draft) add cdivergent1 [content-divergent]
|/
- | o 4:c9708170cf11@default(draft) add bdivergent1 []
+ | o 4:c26f1d3baed2@default(draft) add bdivergent1 []
|/
o 0:135f39f4bd78@default(draft) add _a []
@@ -154,7 +154,7 @@
base: [1] add _b
merging "other" content-divergent changeset 'c2f698071cba'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- working directory is now at 1ed713bcebf6
+ working directory is now at aa26817f6fbe
$ cd ..
--- a/tests/test-sharing.t Sun Jun 03 01:59:41 2018 +0530
+++ b/tests/test-sharing.t Tue Jun 05 00:53:21 2018 +0530
@@ -511,12 +511,12 @@
base: [4] fix bug 24 (v1)
merging "other" content-divergent changeset 'e3f99ce9d9cd'
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
- working directory is now at 711ede2d7a26
+ working directory is now at 5ad6037c046c
$ hg log -q -r 'contentdivergent()'
Figure SG10: Bob's repository after fixing divergence.
$ hg --hidden shortlog -G -r 3::
- @ 7:711ede2d7a26 draft fix bug 24 (v2 by bob)
+ @ 7:5ad6037c046c draft fix bug 24 (v2 by bob)
|
| x 6:e3f99ce9d9cd draft fix bug 24 (v2 by alice)
|/
@@ -527,7 +527,7 @@
o 3:a06ec1bf97bd public fix bug 15 (v2)
|
~
- $ hg --hidden shortlog -r 'precursors(711ede2d7a26)'
+ $ hg --hidden shortlog -r 'precursors(5ad6037c046c)'
5:a360947f6faf draft fix bug 24 (v2 by bob)
6:e3f99ce9d9cd draft fix bug 24 (v2 by alice)
$ cat file1
--- a/tests/test-stabilize-result.t Sun Jun 03 01:59:41 2018 +0530
+++ b/tests/test-stabilize-result.t Tue Jun 05 00:53:21 2018 +0530
@@ -294,14 +294,16 @@
resolving manifests
merging a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ amending changeset eacc9c8240fe
committing files:
a
committing manifest
committing changelog
- working directory is now at 4d6ed26797bc
+ committed changeset 15:f344982e63c4
+ working directory is now at f344982e63c4
$ hg st
$ glog
- @ 15:4d6ed26797bc@default(draft) bk:[] More addition
+ @ 15:f344982e63c4@default(draft) bk:[] More addition
|
| o 11:8fc63fe1f297@default(draft) bk:[] phase-divergent update to 1cf0aacfd363:
| |
@@ -314,7 +316,7 @@
o 0:07f494440405@default(public) bk:[] adda
$ hg summary
- parent: 15:4d6ed26797bc tip
+ parent: 15:f344982e63c4 tip
More addition
branch: default
commit: (clean)
@@ -325,11 +327,11 @@
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
- # Node ID 4d6ed26797bc392c0099e48402a5134e669f1a60
+ # Node ID f344982e63c462b1e44c0371c804685389e673a9
# Parent 7bc2f5967f5e4ed277f60a89b7b04cc5d6407ced
More addition
- diff -r 7bc2f5967f5e -r 4d6ed26797bc a
+ diff -r 7bc2f5967f5e -r f344982e63c4 a
--- a/a Thu Jan 01 00:00:00 1970 +0000
+++ b/a Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,9 @@
@@ -349,9 +351,9 @@
$ hg up --hidden 3932c176bbaa
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
updated to hidden changeset 3932c176bbaa
- (hidden revision '3932c176bbaa' was rewritten as: 4d6ed26797bc)
+ (hidden revision '3932c176bbaa' was rewritten as: f344982e63c4)
working directory parent is obsolete! (3932c176bbaa)
- (use 'hg evolve' to update to its successor: 4d6ed26797bc)
+ (use 'hg evolve' to update to its successor: f344982e63c4)
$ echo 'gotta break' >> a
$ hg amend
2 new content-divergent changesets
@@ -364,7 +366,7 @@
$ glog
@ 17:0b336205a5d0@default(draft) bk:[] More addition (2)
|
- | * 15:4d6ed26797bc@default(draft) bk:[] More addition
+ | * 15:f344982e63c4@default(draft) bk:[] More addition
|/
| o 11:8fc63fe1f297@default(draft) bk:[] phase-divergent update to 1cf0aacfd363:
| |
@@ -379,8 +381,8 @@
$ hg evolve -qn --content-divergent
hg update -c 0b336205a5d0 &&
- hg merge 4d6ed26797bc &&
- hg commit -m "auto merge resolving conflict between 0b336205a5d0 and 4d6ed26797bc"&&
+ hg merge f344982e63c4 &&
+ hg commit -m "auto merge resolving conflict between 0b336205a5d0 and f344982e63c4"&&
hg up -C 3932c176bbaa &&
hg revert --all --rev tip &&
hg commit -m "`hg log -r 0b336205a5d0 --template={desc}`";
@@ -388,7 +390,7 @@
merge:[17] More addition (2)
with: [15] More addition
base: [12] More addition
- merging "other" content-divergent changeset '4d6ed26797bc'
+ merging "other" content-divergent changeset 'f344982e63c4'
merging a
warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
@@ -411,9 +413,9 @@
(no more unresolved files)
continue: hg evolve --continue
$ hg evolve --continue
- working directory is now at e8746835a2a1
+ working directory is now at e015aa78acee
$ glog
- @ 18:e8746835a2a1@default(draft) bk:[] More addition (2)
+ @ 18:e015aa78acee@default(draft) bk:[] More addition (2)
|
| o 11:8fc63fe1f297@default(draft) bk:[] phase-divergent update to 1cf0aacfd363:
| |
@@ -430,11 +432,11 @@
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
- # Node ID e8746835a2a13122bc8c0ed84fe4ee35649af25d
+ # Node ID e015aa78acee692d26215fafdb7f70974682739c
# Parent 7bc2f5967f5e4ed277f60a89b7b04cc5d6407ced
More addition (2)
- diff -r 7bc2f5967f5e -r e8746835a2a1 a
+ diff -r 7bc2f5967f5e -r e015aa78acee a
--- a/a Thu Jan 01 00:00:00 1970 +0000
+++ b/a Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,9 @@