evolve: store the obsmarkers to be deleted in evolvestate
Sometimes, we don't create a new node and obsolete one of the old node in favour
of an existing node. When user calls, `hg evolve --abort`, we need to strip that
obsmarker to go back in the same old state. The obsmarker created for new node
are stripped when the new nodes are stripped.
This patch start storing such obsmarkers in the evolvestate so that we can delete
them later if required. Right now we just store successsor and predecessor
information, we might need a better obsmarker serialization techinque in future
to make it more robust.
================================================||Thetestfor`hguncommit--interactive`||================================================RepoSetup============$.$TESTDIR/testlib/common.sh$cat>>$HGRCPATH<<EOF>[ui]>interactive=true>[extensions]>evolve=>EOF$glog(){>hglog-G--template'{rev}:{node|short}@{branch}({separate("/", obsolete, phase)}) {desc|firstline}\n'"$@">}$hginitrepo$cdrepo$toucha$cat>>a<<EOF>1>2>3>4>5>EOF$hgadda$hgci-m"The base commit"Makesureabortingtheinteractiveselectiondoesnomagic----------------------------------------------------------$hgstatus$hguncommit-i<<EOF>q>EOFdiff--gita/ab/anewfilemode100644examinechangesto'a'?[Ynesfdaq?]qabort:userquit[255]$hgstatusMakeacommitwithmultiplehunks---------------------------------$cat>a<<EOF>-2>-1>0>1>2>3>foo>bar>4>5>babar>EOF$hgdiffdiff-r7733902a8d94a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,5+1,11@@+-2+-1+0123+foo+bar45+babar$hgci-m"another one"Notselectinganythingtouncommit==================================$hguncommit-i<<EOF>y>n>n>n>EOFdiff--gita/ab/a3hunks,6lineschangedexaminechangesto'a'?[Ynesfdaq?]y@@-1,3+1,6@@+-2+-1+0123discardchange1/3to'a'?[Ynesfdaq?]n@@-1,5+4,7@@123+foo+bar45discardchange2/3to'a'?[Ynesfdaq?]n@@-4,2+9,3@@45+babardiscardchange3/3to'a'?[Ynesfdaq?]nabort:nothingselectedtouncommit[255]$hgstatusUncommitachunk================$hgamend--extract-n"note on amend --extract"-i<<EOF>y>y>n>n>EOFdiff--gita/ab/a3hunks,6lineschangedexaminechangesto'a'?[Ynesfdaq?]y@@-1,3+1,6@@+-2+-1+0123discardchange1/3to'a'?[Ynesfdaq?]y@@-1,5+4,7@@123+foo+bar45discardchange2/3to'a'?[Ynesfdaq?]n@@-4,2+9,3@@45+babardiscardchange3/3to'a'?[Ynesfdaq?]n$hgobslog@678a59e5ff90(3)anotherone|xf70fb463d5bf(1)anotheronerewritten(content)as678a59e5ff90usinguncommitbytest(ThuJan0100:00:001970+0000)note:noteonamend--extractTheunselectedpartshouldbeinthediff-----------------------------------------$hgdiffdiff-r678a59e5ff90a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,3+1,6@@+-2+-1+0123Thecommitshouldcontaintherestofpart------------------------------------------$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 678a59e5ff90754d5e94719bd82ad169be773c21 # Parent 7733902a8d94c789ca81d866bea1893d79442db6anotheronediff-r7733902a8d94-r678a59e5ff90a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,5+1,8@@123+foo+bar45+babarUncommitingondirtyworkingdirectory======================================$hgstatusMa$hgdiffdiff-r678a59e5ff90a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,3+1,6@@+-2+-1+0123$hguncommit-n"testing uncommit on dirty wdir"-i<<EOF>y>n>y>EOFdiff--gita/ab/a2hunks,3lineschangedexaminechangesto'a'?[Ynesfdaq?]y@@-1,5+1,7@@123+foo+bar45discardchange1/2to'a'?[Ynesfdaq?]n@@-4,2+6,3@@45+babardiscardchange2/2to'a'?[Ynesfdaq?]ypatchingfileaHunk#1succeededat2withfuzz1(offset0lines).$hgdiffdiff-r46e35360be47a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,3+1,6@@+-2+-1+0123@@-5,3+8,4@@bar45+babar$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 46e35360be473bf761bedf3d05de4a68ffd9d9f8 # Parent 7733902a8d94c789ca81d866bea1893d79442db6anotheronediff-r7733902a8d94-r46e35360be47a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,5+1,7@@123+foo+bar45Checkingtheobsolescencehistory$hgobslog@46e35360be47(5)anotherone|x678a59e5ff90(3)anotherone|rewritten(content)as46e35360be47usinguncommitbytest(ThuJan0100:00:001970+0000)|note:testinguncommitondirtywdir|xf70fb463d5bf(1)anotheronerewritten(content)as678a59e5ff90usinguncommitbytest(ThuJan0100:00:001970+0000)note:noteonamend--extractPushthechangesbacktothecommitandmorecommitsformoretesting$hgamend$glog@6:905eb2a23ea2@default(draft)anotherone|o0:7733902a8d94@default(draft)Thebasecommit$touchfoo$echo"hey">>foo$hgci-Am"Added foo"addingfooTestinguncommitingawholechangesetandalsoforafileaddition==================================================================$hguncommit-i<<EOF>y>y>EOFdiff--gita/foob/foonewfilemode100644examinechangesto'foo'?[Ynesfdaq?]y@@-0,0+1,1@@+heydiscardthischangeto'foo'?[Ynesfdaq?]ynewchangesetisempty(use'hg prune .'toremoveit)$hgstatusAfoo$hgdiffdiff-r857367499298foo---/dev/nullThuJan0100:00:001970+0000+++b/fooThuJan0100:00:001970+0000@@-0,0+1,1@@+hey$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 857367499298e999b5841bb01df65f73088b5d3b # Parent 905eb2a23ea2d92073419d0e19165b90d36ea223Addedfoo$hgamendTestingtouncommitremovedfilescompletely============================================$hgrma$hgci-m"Removed a"$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 219cfe20964e93f8bb9bd82ceaa54d3b776046db # Parent 42cc15efbec26c14d96d805dee2766ba91d1fd31Removedadiff-r42cc15efbec2-r219cfe20964ea---a/aThuJan0100:00:001970+0000+++/dev/nullThuJan0100:00:001970+0000@@-1,11+0,0@@--2--1-0-1-2-3-foo-bar-4-5-babarNotexaminingthefile----------------------$hguncommit-i<<EOF>n>EOFdiff--gita/ab/adeletedfilemode100644examinechangesto'a'?[Ynesfdaq?]nabort:nothingselectedtouncommit[255]Examiningthefile------------------XXX:thereisabugininteractiveselectionasitisnotlettingtoexaminethefile.Triedwithcursestoo.InthecursesUI,ifyoujustunselectthehunksandthenotfilemodthingatthetop,itwillshowthesame"nothing unselectedto uncommit"messagewhichisabugininteractiveselection.$hguncommit-i<<EOF>y>EOFdiff--gita/ab/adeletedfilemode100644examinechangesto'a'?[Ynesfdaq?]ynewchangesetisempty(use'hg prune .'toremoveit)$hgdiffdiff-r737487f1e5f8a---a/aThuJan0100:00:001970+0000+++/dev/nullThuJan0100:00:001970+0000@@-1,11+0,0@@--2--1-0-1-2-3-foo-bar-4-5-babar$hgstatusRa$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 737487f1e5f853e55decb73ea31522c63e7f5980 # Parent 42cc15efbec26c14d96d805dee2766ba91d1fd31Removeda$hgprune.0filesupdated,0filesmerged,0filesremoved,0filesunresolvedworkingdirectorynowat42cc15efbec21changesetspruned$hgrevert--allundeletinga$glog@10:42cc15efbec2@default(draft)Addedfoo|o6:905eb2a23ea2@default(draft)anotherone|o0:7733902a8d94@default(draft)ThebasecommitTestingwhenanewfileisaddedinthelastcommit===================================================$echo"foo">>foo$touchx$echo"abcd">>x$hgaddx$hgci-m"Added x"$hguncommit-i<<EOF>y>y>y>n>EOFdiff--gita/foob/foo1hunks,1lineschangedexaminechangesto'foo'?[Ynesfdaq?]y@@-1,1+1,2@@hey+foodiscardchange1/2to'foo'?[Ynesfdaq?]ydiff--gita/xb/xnewfilemode100644examinechangesto'x'?[Ynesfdaq?]y@@-0,0+1,1@@+abcddiscardchange2/2to'x'?[Ynesfdaq?]n$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 25a080d13cb23dbd014839f54d99a96e57ba7e9b # Parent 42cc15efbec26c14d96d805dee2766ba91d1fd31Addedxdiff-r42cc15efbec2-r25a080d13cb2x---/dev/nullThuJan0100:00:001970+0000+++b/xThuJan0100:00:001970+0000@@-0,0+1,1@@+abcd$hgdiffdiff-r25a080d13cb2foo---a/fooThuJan0100:00:001970+0000+++b/fooThuJan0100:00:001970+0000@@-1,1+1,2@@hey+foo$hgstatusMfoo$hgrevert--allrevertingfooTestingbetweenthestackandwithdirtyworkingcopy=====================================================$glog@16:25a080d13cb2@default(draft)Addedx|o10:42cc15efbec2@default(draft)Addedfoo|o6:905eb2a23ea2@default(draft)anotherone|o0:7733902a8d94@default(draft)Thebasecommit$hgup905eb2a23ea20filesupdated,0filesmerged,2filesremoved,0filesunresolved$touchbar$echo"foo">>bar$hgaddbar$hgstatusAbar?foo.orig$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 905eb2a23ea2d92073419d0e19165b90d36ea223 # Parent 7733902a8d94c789ca81d866bea1893d79442db6anotheronediff-r7733902a8d94-r905eb2a23ea2a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,5+1,11@@+-2+-1+0123+foo+bar45+babar$hguncommit-i<<EOF>y>n>n>y>EOFdiff--gita/ab/a3hunks,6lineschangedexaminechangesto'a'?[Ynesfdaq?]y@@-1,3+1,6@@+-2+-1+0123discardchange1/3to'a'?[Ynesfdaq?]n@@-1,5+4,7@@123+foo+bar45discardchange2/3to'a'?[Ynesfdaq?]n@@-4,2+9,3@@45+babardiscardchange3/3to'a'?[Ynesfdaq?]ypatchingfileaHunk#1succeededat1withfuzz1(offset-1lines).2neworphanchangesets$hgdiffdiff-r676366511f95a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-8,3+8,4@@bar45+babardiff-r676366511f95bar---/dev/nullThuJan0100:00:001970+0000+++b/barThuJan0100:00:001970+0000@@-0,0+1,1@@+foo$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 676366511f95ca4122413dcf79b45eaab61fb387 # Parent 7733902a8d94c789ca81d866bea1893d79442db6anotheronediff-r7733902a8d94-r676366511f95a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,5+1,10@@+-2+-1+0123+foo+bar45$hgstatusMaAbar?foo.origMoreuncommitonthesamedirtyworkingcopy=============================================$hguncommit-i<<EOF>y>y>n>EOFdiff--gita/ab/a2hunks,5lineschangedexaminechangesto'a'?[Ynesfdaq?]y@@-1,3+1,6@@+-2+-1+0123discardchange1/2to'a'?[Ynesfdaq?]y@@-1,5+4,7@@123+foo+bar45discardchange2/2to'a'?[Ynesfdaq?]n$hgexp # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 62d907d0c4fa13b4b8bfeed05f13751035daf963 # Parent 7733902a8d94c789ca81d866bea1893d79442db6anotheronediff-r7733902a8d94-r62d907d0c4faa---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,5+1,7@@123+foo+bar45$hgdiffdiff-r62d907d0c4faa---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,3+1,6@@+-2+-1+0123@@-5,3+8,4@@bar45+babardiff-r62d907d0c4fabar---/dev/nullThuJan0100:00:001970+0000+++b/barThuJan0100:00:001970+0000@@-0,0+1,1@@+foo$hgstatusMaAbar?foo.origInteractiveuncommitwithapattern-----------------------------------(moresetup)$hgci-m'roaming changes'$cat>b<<EOF>a>b>c>d>e>f>h>EOF$hgaddb$hgci-m'add b'$echo'celeste'>>a$echo'i'>>b$hgci-m'some more changes'$hgexport # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID be5c67225e80b050867862bbd9f4755c4e9207c5 # Parent c280a907fddcef2ffe9fadcc2d87f29998e22b2fsomemorechangesdiff-rc280a907fddc-rbe5c67225e80a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-9,3+9,4@@45babar+celestediff-rc280a907fddc-rbe5c67225e80b---a/bThuJan0100:00:001970+0000+++b/bThuJan0100:00:001970+0000@@-5,3+5,4@@efh+i$hguncommit-ia<<DONE>y>y>DONEdiff--gita/ab/a1hunks,1lineschangedexaminechangesto'a'?[Ynesfdaq?]y@@-9,3+9,4@@45babar+celestediscardthischangeto'a'?[Ynesfdaq?]y$hgstatusMa?foo.orig$hgdiffdiff-rc701d7c8d18ba---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-9,3+9,4@@45babar+celeste$hgexport # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID c701d7c8d18be55a92688f4458c26bd74fb1f525 # Parent c280a907fddcef2ffe9fadcc2d87f29998e22b2fsomemorechangesdiff-rc280a907fddc-rc701d7c8d18bb---a/bThuJan0100:00:001970+0000+++b/bThuJan0100:00:001970+0000@@-5,3+5,4@@efh+i(reset)$cat<<EOF>a>-3>-2>-1>0>1>2>3>foo>bar>4>5>babar>celeste>EOF$hgamendSamebutdonotselectsomechangein'a'$hguncommit-ia<<DONE>y>y>n>DONEdiff--gita/ab/a2hunks,2lineschangedexaminechangesto'a'?[Ynesfdaq?]y@@-1,3+1,4@@+-3-2-10discardchange1/2to'a'?[Ynesfdaq?]y@@-9,3+10,4@@45babar+celestediscardchange2/2to'a'?[Ynesfdaq?]n$hgstatusMa?foo.orig$hgdiffdiff-r28d5de12b225a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-1,3+1,4@@+-3-2-10$hgexport # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 28d5de12b225d1e0951110cced8d8994227be026 # Parent c280a907fddcef2ffe9fadcc2d87f29998e22b2fsomemorechangesdiff-rc280a907fddc-r28d5de12b225a---a/aThuJan0100:00:001970+0000+++b/aThuJan0100:00:001970+0000@@-9,3+9,4@@45babar+celestediff-rc280a907fddc-r28d5de12b225b---a/bThuJan0100:00:001970+0000+++b/bThuJan0100:00:001970+0000@@-5,3+5,4@@efh+i$catbabcdefhi