obshistory: add _predecessorsverb() similar to _successorsetverb()
========================================================Teststheresolutionofcontentdivergence:cornercases========================================================Thisfileintendtocovercasesthatarespecificenoughtonotfitintheothercases.$cat>>$HGRCPATH<<EOF>[alias]>glog=log-GT"{rev}:{node|short}{desc|firstline}\n ({bookmarks}) [{branch}] {phase}">[defaults]>amend=-d"0 0">fold=-d"0 0">[web]>push_ssl=false>allow_push=*>[phases]>publish=False>[diff]>git=1>unified=0>[ui]>logtemplate={rev}:{node|short}@{branch}({phase}){desc|firstline}[{instabilities}]\n>[experimental]>evolution.allowdivergence=True>[extensions]>EOF$echo"evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/">>$HGRCPATH$mkcommit(){>echo"$1">"$1">hgadd"$1">hgci-m"add $1">}$mkcommits(){>foriin$@;domkcommit$i;done>}Basictestofdivergence:twodivergentchangesetswiththesameparentsWith--all--anywededupethedivergentandsolvethedivergenceonce$hginittest1$cdtest1$echoa>a$hgci-Aqm"added a"$echob>b$hgci-Aqm"added b"$hgup.^0filesupdated,0filesmerged,1filesremoved,0filesunresolved$echobdivergent>bdivergent1$hgci-Am"divergent"addingbdivergent1creatednewhead$hgup.^0filesupdated,0filesmerged,1filesremoved,0filesunresolved$echobdivergent>bdivergent2$hgci-Am"divergent"addingbdivergent2creatednewhead$hgprune-s8374d2ddc3a4"desc('added b')"1changesetspruned$hgprune-s593c57f2117e"desc('added b')"--hidden1changesetspruned2newcontent-divergentchangesets$hglog-G@3:8374d2ddc3a4@default(draft)divergent[content-divergent]||*2:593c57f2117e@default(draft)divergent[content-divergent]|/o0:9092f1db7931@default(draft)addeda[]$hgevolve--all--any--content-divergent--updatemerge:[2]divergentwith:[3]divergentbase:[1]addedb1filesupdated,0filesmerged,0filesremoved,0filesunresolvedworkingdirectoryisnowat45bf1312f454$hglog-G@4:45bf1312f454@default(draft)divergent[]|o0:9092f1db7931@default(draft)addeda[]$hgdebugobsolete5f6d8a4bf34ab274ccc9f631c2536964b8a3666d8374d2ddc3a4d48428c3d2f80e4fc86f13736f960(ThuJan0100:00:001970+0000){'ef1':'9','operation':'prune','user':'test'}5f6d8a4bf34ab274ccc9f631c2536964b8a3666d593c57f2117e33dd0884382f02789d948f5485570(ThuJan0100:00:001970+0000){'ef1':'9','operation':'prune','user':'test'}593c57f2117e33dd0884382f02789d948f54855745bf1312f45468b76158b33f8426e6530c8b35b10(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}8374d2ddc3a4d48428c3d2f80e4fc86f13736f9645bf1312f45468b76158b33f8426e6530c8b35b10(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}$hgobslog--all@45bf1312f454(4)divergent|\x|593c57f2117e(2)divergent||amended(content)as45bf1312f454usingevolvebytest(ThuJan0100:00:001970+0000)|||x8374d2ddc3a4(3)divergent|/amended(content)as45bf1312f454usingevolvebytest(ThuJan0100:00:001970+0000)|x5f6d8a4bf34a(1)addedbrewritten(description,content)as593c57f2117eusingprunebytest(ThuJan0100:00:001970+0000)rewritten(description,content)as8374d2ddc3a4usingprunebytest(ThuJan0100:00:001970+0000)Testdivergenceresolutionwhenityieldstoanemptycommit(issue4950)cdivergent2containsthesamecontentthancdivergent1andtheyaredivergentversionsoftherevision_c$hgup.^0filesupdated,0filesmerged,2filesremoved,0filesunresolved$mkcommit_ccreatednewhead$hgup.^0filesupdated,0filesmerged,1filesremoved,0filesunresolved$mkcommitcdivergent1creatednewhead$hgup.^0filesupdated,0filesmerged,1filesremoved,0filesunresolved$echo"cdivergent1">cdivergent1$hgaddcdivergent1$hgci-m"add _c"creatednewhead$hglog-G@7:b2ae71172042@default(draft)add_c[]||o6:e3ff64ce8d4c@default(draft)addcdivergent1[]|/|o5:48819a835615@default(draft)add_c[]|/|o4:45bf1312f454@default(draft)divergent[]|/o0:9092f1db7931@default(draft)addeda[]$hgprune-sb2ae7117204248819a8356151changesetspruned$hgprune-se3ff64ce8d4c48819a835615--hidden1changesetspruned2newcontent-divergentchangesets$hglog-G@7:b2ae71172042@default(draft)add_c[content-divergent]||*6:e3ff64ce8d4c@default(draft)addcdivergent1[content-divergent]|/|o4:45bf1312f454@default(draft)divergent[]|/o0:9092f1db7931@default(draft)addeda[]$hgevolve--all--any--content-divergentmerge:[6]addcdivergent1with:[7]add_cbase:[5]add_c0filesupdated,0filesmerged,0filesremoved,0filesunresolvednothingchangedworkingdirectoryisnowate3ff64ce8d4c$hglog-G@6:e3ff64ce8d4c@default(draft)addcdivergent1[]||o4:45bf1312f454@default(draft)divergent[]|/o0:9092f1db7931@default(draft)addeda[]$hgdebugobsolete5f6d8a4bf34ab274ccc9f631c2536964b8a3666d8374d2ddc3a4d48428c3d2f80e4fc86f13736f960(ThuJan0100:00:001970+0000){'ef1':'9','operation':'prune','user':'test'}5f6d8a4bf34ab274ccc9f631c2536964b8a3666d593c57f2117e33dd0884382f02789d948f5485570(ThuJan0100:00:001970+0000){'ef1':'9','operation':'prune','user':'test'}593c57f2117e33dd0884382f02789d948f54855745bf1312f45468b76158b33f8426e6530c8b35b10(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}8374d2ddc3a4d48428c3d2f80e4fc86f13736f9645bf1312f45468b76158b33f8426e6530c8b35b10(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}48819a83561596ef0aeac4082eaaa8afe4320f3ab2ae71172042972a8e8d2bc11e2b2fe4e0c3aa490(ThuJan0100:00:001970+0000){'ef1':'8','operation':'prune','user':'test'}48819a83561596ef0aeac4082eaaa8afe4320f3ae3ff64ce8d4ce33b40d9f367a8ec472fec588ca30(ThuJan0100:00:001970+0000){'ef1':'9','operation':'prune','user':'test'}b2ae71172042972a8e8d2bc11e2b2fe4e0c3aa49e3ff64ce8d4ce33b40d9f367a8ec472fec588ca30(ThuJan0100:00:001970+0000){'ef1':'1','operation':'evolve','user':'test'}BROKEN:Weshouldhavecreatedanewcommitassuccessorinsteadofreusingrevision6$hgobslog--all@e3ff64ce8d4c(6)addcdivergent1|\|xb2ae71172042(7)add_c|/reworded(description)ase3ff64ce8d4cusingevolvebytest(ThuJan0100:00:001970+0000)|x48819a835615(5)add_camended(content)asb2ae71172042usingprunebytest(ThuJan0100:00:001970+0000)rewritten(description,content)ase3ff64ce8d4cusingprunebytest(ThuJan0100:00:001970+0000)$cd..TestNonedocstringissueofevolvedivergent,whichcausedhgcrush$hginittest2$cdtest2$mkcommits_a_b$hgup.^0filesupdated,0filesmerged,1filesremoved,0filesunresolved$echobdivergent>bdivergent11$hgci-Am"bdivergent"addingbdivergent11creatednewhead$hgup.^0filesupdated,0filesmerged,1filesremoved,0filesunresolved$echobdivergent>bdivergent22$hgci-Am"bdivergent"addingbdivergent22creatednewhead$hglog-G@3:6b096fb45070@default(draft)bdivergent[]||o2:05a6b6a9e633@default(draft)bdivergent[]|/|o1:37445b16603b@default(draft)add_b[]|/o0:135f39f4bd78@default(draft)add_a[]$hgprune-s6b096fb4507037445b16603b1changesetspruned$hgprune-s05a6b6a9e63337445b16603b--hidden1changesetspruned2newcontent-divergentchangesets$hglog-G@3:6b096fb45070@default(draft)bdivergent[content-divergent]||*2:05a6b6a9e633@default(draft)bdivergent[content-divergent]|/o0:135f39f4bd78@default(draft)add_a[]$cat>$TESTTMP/test_extension.py<<EOF>frommercurialimportmerge>origupdate=merge.update>defnewupdate(*args,**kwargs):>returnorigupdate(*args,**kwargs)>merge.update=newupdate>EOF$cat>>$HGRCPATH<<EOF>[extensions]>testextension=$TESTTMP/test_extension.py>EOF$hgevolvenothingtoevolveoncurrentworkingcopyparent(doyouwanttouse--content-divergent)[2]$hgevolve--content-divergentmerge:[2]bdivergentwith:[3]bdivergentbase:[1]add_b1filesupdated,0filesmerged,0filesremoved,0filesunresolvedworkingdirectoryisnowat73ff357d3975$hglog-G@4:73ff357d3975@default(draft)bdivergent[]|o0:135f39f4bd78@default(draft)add_a[]$hgdebugobsolete37445b16603b50165d5eb80735fb986c72a2dac16b096fb450709a194b21fb9b192fe9b1572c4af00(ThuJan0100:00:001970+0000){'ef1':'9','operation':'prune','user':'test'}37445b16603b50165d5eb80735fb986c72a2dac105a6b6a9e633802d2bdd06e6d292982a767d930e0(ThuJan0100:00:001970+0000){'ef1':'9','operation':'prune','user':'test'}05a6b6a9e633802d2bdd06e6d292982a767d930e73ff357d3975b9f319b59fd5853abc3c8294ae890(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}6b096fb450709a194b21fb9b192fe9b1572c4af073ff357d3975b9f319b59fd5853abc3c8294ae890(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}$hgobslog--all@73ff357d3975(4)bdivergent|\x|05a6b6a9e633(2)bdivergent||amended(content)as73ff357d3975usingevolvebytest(ThuJan0100:00:001970+0000)|||x6b096fb45070(3)bdivergent|/amended(content)as73ff357d3975usingevolvebytest(ThuJan0100:00:001970+0000)|x37445b16603b(1)add_brewritten(description,content)as05a6b6a9e633usingprunebytest(ThuJan0100:00:001970+0000)rewritten(description,content)as6b096fb45070usingprunebytest(ThuJan0100:00:001970+0000)$cd..Testtomakesurethatevolvedon't fall into unrecoverable state (issue6053)------------------------------------------------------------------------------It happened when two divergent csets has different parent (need relocation)and resolution parent is obsolete. So this issue triggered when duringrelocation we hit conflicts. So lets make the repo as described. $ hg init localside $ cd localside $ for ch in a b c d e; do > echo $ch > $ch; > hg add $ch; > hg ci -m "added "$ch; > done; $ hg glog @ 4:8d71eadcc9df added e | () [default] draft o 3:9150fe93bec6 added d | () [default] draft o 2:155349b645be added c | () [default] draft o 1:5f6d8a4bf34a added b | () [default] draft o 0:9092f1db7931 added a () [default] draft $ echo ee > e $ hg amend -m "updated e" $ hg up 1 -qTo make sure we hit conflict while relocating $ echo dd > d $ echo ee > e $ hg add d e $ hg ci -m "updated e" created new headLets create divergence $ hg prune 4 -s . --hidden 1 changesets pruned 2 new content-divergent changesetsMaking obsolete resolution parent $ hg prune 3 1 changesets pruned 1 new orphan changesets $ hg glog @ 6:de4ea3103326 updated e | () [default] draft | * 5:ff6f7cd76a7c updated e | | () [default] draft | x 3:9150fe93bec6 added d | | () [default] draft | o 2:155349b645be added c |/ () [default] draft o 1:5f6d8a4bf34a added b | () [default] draft o 0:9092f1db7931 added a () [default] draft $ hg evolve --content-divergent --any --update --config ui.interactive=true <<EOF>c>EOFmerge:[5]updatedewith:[6]updatedebase:[4]addederebasing"divergent"content-divergentchangesetff6f7cd76a7con155349b645berebasing"other"content-divergentchangesetde4ea3103326on155349b645befile'd'wasdeletedinlocalbutwasmodifiedinother.Youcanuse(c)hangedversion,leave(d)eleted,orleave(u)nresolved.Whatdoyouwanttodo?c0filesupdated,1filesmerged,0filesremoved,0filesunresolvedworkingdirectoryisnowateb6357cd41b6$hgglog-l1@9:eb6357cd41b6updatede|()[default]draft~$hgdebugobsolete8d71eadcc9dfb21a924e75a5796c2f011bdc55a4ff6f7cd76a7c97d938e8fe87f0fc816b669294350(ThuJan0100:00:001970+0000){'ef1':'9','operation':'amend','user':'test'}8d71eadcc9dfb21a924e75a5796c2f011bdc55a4de4ea3103326293994c634101e780724346ee89f0(ThuJan0100:00:001970+0000){'ef1':'13','operation':'prune','user':'test'}9150fe93bec603cd88d05cda9f6ff13420cb53e90{155349b645beebee15325a9a22dd0c9ef8fbbbd3}(ThuJan0100:00:001970+0000){'ef1':'0','operation':'prune','user':'test'}ff6f7cd76a7c97d938e8fe87f0fc816b669294350ceb21ca2557a61433f097e4d64024e37cae2c100(ThuJan0100:00:001970+0000){'ef1':'4','operation':'evolve','user':'test'}de4ea3103326293994c634101e780724346ee89fa2465d1d56d1aee8ed90d2292978456d2be6f7b90(ThuJan0100:00:001970+0000){'ef1':'4','operation':'evolve','user':'test'}0ceb21ca2557a61433f097e4d64024e37cae2c10eb6357cd41b6a6ec2f12e81cf96eaeeb54b057d20(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}a2465d1d56d1aee8ed90d2292978456d2be6f7b9eb6357cd41b6a6ec2f12e81cf96eaeeb54b057d20(ThuJan0100:00:001970+0000){'ef1':'0','operation':'evolve','user':'test'}$hgobslog--all@eb6357cd41b6(9)updatede|\x|0ceb21ca2557(7)updatede||amended(content)aseb6357cd41b6usingevolvebytest(ThuJan0100:00:001970+0000)|||xa2465d1d56d1(8)updatede||rewrittenaseb6357cd41b6usingevolvebytest(ThuJan0100:00:001970+0000)|||xde4ea3103326(6)updatede||rebased(parent)asa2465d1d56d1usingevolvebytest(ThuJan0100:00:001970+0000)||x|ff6f7cd76a7c(5)updatede|/rebased(parent)as0ceb21ca2557usingevolvebytest(ThuJan0100:00:001970+0000)|x8d71eadcc9df(4)addederewritten(description,parent,content)asde4ea3103326usingprunebytest(ThuJan0100:00:001970+0000)rewritten(description,content)asff6f7cd76a7cusingamendbytest(ThuJan0100:00:001970+0000)$cd..Checkthatcancelingoffiledeletionaremergecorrectly---------------------------------------------------------Fileaddition/deletiontendtohavespecialprocessing.Sowebettertestthemdirectory$hginitnon-public$cdnon-public$echoa>a$echob>b$echoc>c$echod>d$hgci-Aqminitialoops,wemeanttodeletejust'a',butwedeleted'b'and'c'too$hgrmabc$hgci-m'delete a'$hgrevert-r.^b$hgamendcreatesomecontentdivergence$hgcodff6e52f5e41--hidden0filesupdated,0filesmerged,1filesremoved,0filesunresolvedupdatedtohiddenchangesetdff6e52f5e41(hiddenrevision'dff6e52f5e41'wasrewrittenas:0825dcee2670)workingdirectoryparentisobsolete!(dff6e52f5e41)(use'hg evolve'toupdatetoitssuccessor:0825dcee2670)$hgrevert-r.^c$hgamend2newcontent-divergentchangesets$hgglog--hidden@3:92ecd58f9b05deletea|()[default]draft|*2:0825dcee2670deletea|/()[default]draft|x1:dff6e52f5e41deletea|/()[default]drafto0:75d2b02c4a5cinitial()[default]draftResolvethedivergence,only"a"shouldberemoved$hgevolve--content-divergent--updatemerge:[2]deleteawith:[3]deleteabase:[1]deletea1filesupdated,0filesmerged,0filesremoved,0filesunresolvedworkingdirectoryisnowat7ca6a9fafcf6$hgglog@4:7ca6a9fafcf6deletea|()[default]drafto0:75d2b02c4a5cinitial()[default]draft$hgdiff--change.diff--gita/ab/adeletedfilemode100644---a/a+++/dev/null@@-1,1+0,0@@-a$hgdebugobsoletedff6e52f5e419381c070159c8038ac948f59283f0825dcee2670349e749f1df45857fca34f61e3500(ThuJan0100:00:001970+0000){'ef1':'8','operation':'amend','user':'test'}dff6e52f5e419381c070159c8038ac948f59283f92ecd58f9b05d6c0a1c3833a79359eea4b0268ff0(ThuJan0100:00:001970+0000){'ef1':'8','operation':'amend','user':'test'}0825dcee2670349e749f1df45857fca34f61e3507ca6a9fafcf619820b754070ac0b4476510054220(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}92ecd58f9b05d6c0a1c3833a79359eea4b0268ff7ca6a9fafcf619820b754070ac0b4476510054220(ThuJan0100:00:001970+0000){'ef1':'8','operation':'evolve','user':'test'}$hgobslog--all@7ca6a9fafcf6(4)deletea|\x|0825dcee2670(2)deletea||amended(content)as7ca6a9fafcf6usingevolvebytest(ThuJan0100:00:001970+0000)|||x92ecd58f9b05(3)deletea|/amended(content)as7ca6a9fafcf6usingevolvebytest(ThuJan0100:00:001970+0000)|xdff6e52f5e41(1)deleteaamended(content)as0825dcee2670usingamendbytest(ThuJan0100:00:001970+0000)amended(content)as92ecd58f9b05usingamendbytest(ThuJan0100:00:001970+0000)