Mercurial > evolve
changeset 4984:b779b40f996e stable
evolve: fix content-divergence resolution when p1 is null (issue6201)
Before this fix, in cases like in the added test, the revision number -1 of the
parent was misinterpreted to mean the tipmost revision instead of the null
revision, causing the content-divergence resolution to fail.
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Fri, 06 Dec 2019 14:01:29 +0100 |
parents | 60be1bd580c7 |
children | 588b3484c131 |
files | hgext3rd/evolve/evolvecmd.py tests/test-evolve-content-divergent-first-changeset.t |
diffstat | 2 files changed, 50 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext3rd/evolve/evolvecmd.py Tue Dec 03 09:43:10 2019 -0800 +++ b/hgext3rd/evolve/evolvecmd.py Fri Dec 06 14:01:29 2019 +0100 @@ -391,7 +391,15 @@ # the changeset on which resolution changeset will be based on resolutionparent = repo[divp1].node() - gca = repo.revs(b"ancestor(%d, %d)" % (otherp1, divp1)) + # the nullrev has to be handled specially because -1 is overloaded to both + # mean nullrev (this meaning is used for the result of changectx.rev(), as + # called above) and the tipmost revision (this meaning is used for the %d + # format specifier, as used below) + if nodemod.nullrev in (otherp1, divp1): + # nullrev is the only possible ancestor if otherp1 or divp1 is nullrev + gca = [nodemod.nullrev] + else: + gca = repo.revs(b"ancestor(%d, %d)" % (otherp1, divp1)) # divonly: non-obsolete csets which are topological ancestor of "divergent" # but not "other" divonly = repo.revs(b"only(%d, %d) - obsolete()" % (divergent.rev(),
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-content-divergent-first-changeset.t Fri Dec 06 14:01:29 2019 +0100 @@ -0,0 +1,41 @@ + $ . $TESTDIR/testlib/pythonpath.sh + $ echo "[extensions]" >> $HGRCPATH + $ echo "evolve=" >> $HGRCPATH + +This test file tests the case of content-divergence resolution of changesets +that have the null revision as the parent. + + $ hg init issue6201 + $ cd issue6201 + + $ touch test + $ hg add test + $ hg commit -m test + $ hg log -T '{node|short}\n' + be090ea66256 + + $ echo a >> test + $ hg amend -m div1 + $ hg log -T '{node|short}\n' + 79fa0eb22d65 + + $ hg up be090ea66256 --hidden --quiet + updated to hidden changeset be090ea66256 + (hidden revision 'be090ea66256' was rewritten as: 79fa0eb22d65) + working directory parent is obsolete! (be090ea66256) + $ echo a >> test + $ echo b >> test + $ hg amend -m div2 + 2 new content-divergent changesets + $ hg log -T '{node|short}\n' + 4b2524b7508e + 79fa0eb22d65 + + $ hg evolve --content-divergent --config ui.merge=internal:other + merge:[1] div1 + with: [2] div2 + base: [0] test + 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + working directory is now at 12772224141b + + $ hg evolve --list