directaccess: inspect trees of len() > 3
Previously, when inspecting revset AST's we'd only traverse down the tree if it
was length 3 ([op, left, right]). In some situations, like 'or' the tree node
will be greater than length 3 ([op, first, second, ..., nth]). So we need to
traverse all the parts of the node to catch all the symbols.
$cat>>$HGRCPATH<<EOF>[defaults]>amend=-d"0 0">fold=-d"0 0">[web]>push_ssl=false>allow_push=*>[phases]>publish=False>[alias]>qlog=log--template='{rev} - {node|short}{desc} ({phase})\n'>[diff]>git=1>unified=0>[extensions]>hgext.graphlog=>EOF$echo"evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py">>$HGRCPATH$mkcommit(){>echo"$1">"$1">hgadd"$1">hgci-m"add $1">}$mkstack(){>#Createsastackofcommitbasedon$1withmessagesfrom$2,$3..>hgupdate$1-C>shift>mkcommits$*>}$glog(){>hgglog--template'{rev}:{node|short}@{branch}({phase}) {desc|firstline}\n'"$@">}$shaof(){>hglog-T{node}-r"first(desc($1))">}$mkcommits(){>foriin$@;domkcommit$i;done>}Testtheevolutiontesttopicisinstalled$hghelpevolutionSafelyRewritingHistory""""""""""""""""""""""""Obsolescencemarkersmakeitpossibletomarkchangesetsthathavebeendeletedorsupersetinanewversionofthechangeset.Unlikethepreviouswayofhandlingsuchchanges,bystrippingtheoldchangesetsfromtherepository,obsolescencemarkerscanbepropagatedbetweenrepositories.Thisallowsforasafeandsimplewayofexchangingmutablehistoryandalteringitafterthefact.Changesetphasesarerespected,suchthatonlydraftandsecretchangesetscanbealtered(see"hg hg phases"fordetails).Obsolescenceistrackedusing"obsolete markers",apieceofmetadatatrackingwhichchangesetshavebeenmadeobsolete,potentialsuccessorsforagivenchangeset,themomentthechangesetwasmarkedasobsolete,andtheuserwhoperformedtherewritingoperation.Themarkersarestoredseparatelyfromstandardchangesetdatacanbeexchangedwithoutanyoftheprecursorchangesets,preventingunnecessaryexchangeofobsolescencedata.Thecompletesetofobsolescencemarkersdescribesahistoryofchangesetmodificationsthatisorthogonaltotherepositoryhistoryoffilemodifications.Thischangesethistoryallowsfordetectionandautomaticresolutionofedgecasesarisingfrommultipleusersrewritingthesamepartofhistoryconcurrently.Currentfeaturestatus======================Thisfeatureisstillindevelopment.Ifyouseethishelp,youhaveenableanextensionthatturnedthisfeatureon.Obsolescencemarkerswillbeexchangedbetweenrepositoriesthatexplicitlyassertsupportfortheobsolescencefeature(thiscancurrentlyonlybedoneviaanextension).variousinit$hginitlocal$cdlocal$mkcommita$mkcommitb$cat>>.hg/hgrc<<EOF>[phases]>publish=True>EOF$hgpull-q.#make1public$rm.hg/hgrc$mkcommitc$mkcommitd$hgup10filesupdated,0filesmerged,2filesremoved,0filesunresolved$mkcommite-qcreatednewhead$mkcommitf$hgqlog5-e44648563c73addf(draft)4-fbb94e3a0ecfadde(draft)3-47d2a3944de8addd(draft)2-4538525df7e2addc(draft)1-7c3bad9141dcaddb(public)0-1f0dee641bb7adda(public)testkillandimmutablechangeset$hglog-r1--template'{rev}{phase}{obsolete}\n'1publicstable$hgkill1abort:cannotpruneimmutablechangeset:7c3bad9141dc(see"hg help phases"fordetails)[255]$hglog-r1--template'{rev}{phase}{obsolete}\n'1publicstabletestsimplekill$hgid-n5$hgkill.0filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowatfbb94e3a0ecf1changesetspruned$hgqlog4-fbb94e3a0ecfadde(draft)3-47d2a3944de8addd(draft)2-4538525df7e2addc(draft)1-7c3bad9141dcaddb(public)0-1f0dee641bb7adda(public)testmultiplekill$hgkill4-r30filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowat7c3bad9141dc2changesetspruned$hgqlog2-4538525df7e2addc(draft)1-7c3bad9141dcaddb(public)0-1f0dee641bb7adda(public)testkillwithdirtychanges$hgup21filesupdated,0filesmerged,0filesremoved,0filesunresolved$echo4>g$hgaddg$hgkill.0filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowat7c3bad9141dc1changesetspruned$hgstAgSmoketestdebugobsrelsethashtree:$hgdebugobsrelsethashtree1f0dee641bb7258c56bd60e93edfa2405381c41e00000000000000000000000000000000000000007c3bad9141dcb46ff89abf5f61856facd56e476c*(glob)4538525df7e2b9f09423636c61ef63a4cb872a2d*(glob)47d2a3944de8b013de3be9578e8e344ea2e6c097*(glob)fbb94e3a0ecf6d20c2cc31152ef162ce45af982f*(glob)e44648563c73f75950076031c6fdf06629de95f1*(glob)$cd..##########################importingParrentest##########################$cat<<EOF>>$HGRCPATH>[ui]>logtemplate="{rev}\t{bookmarks}: {desc|firstline} - {author|user}\n">EOFCreatingAndUpdatingChangeset===============================SetuptheBaseRepo-------------------Westartwithaplainbaserepo::$hginitmain;cdmain$cat>main-file-1<<-EOF>One>>Two>>Three>EOF$echoTwo>main-file-2$hgaddaddingmain-file-1addingmain-file-2$hgcommit--messagebase$cd..andclonethisintoanewrepowherewedoourwork::$hgclonemainworkupdatingtobranchdefault2filesupdated,0filesmerged,0filesremoved,0filesunresolved$cdworkCreateFirstPatch------------------Tobeginwith,wejustdothechangesthatwillbetheinitialversionofthechangeset::$echoOne>file-from-A$sed-i''-es/One/Eins/main-file-1$hgaddfile-from-ASothisiswhatwewouldlikeourchangesettobe::$hgdiffdiff--gita/file-from-Ab/file-from-Anewfilemode100644---/dev/null+++b/file-from-A@@-0,0+1,1@@+Onediff--gita/main-file-1b/main-file-1---a/main-file-1+++b/main-file-1@@-1,1+1,1@@-One+EinsTocommititwejust-commitit::$hgcommit--message"a nifty feature"andplaceabookmarksowecaneasilyrefertoitagain(whichwecouldhavedonebeforethecommit)::$hgbookfeature-ACreateSecondPatch-------------------Let's do this again for the second changeset:: $ echo Two >file-from-B $ sed -i'' -e s/Two/Zwie/ main-file-1 $ hg add file-from-BBefore committing, however, we need to switch to a new bookmark for the secondchangeset. Otherwise we would inadvertently move the bookmark for our first changeset.It is therefore advisable to always set the bookmark before committing:: $ hg book feature-B $ hg commit --message "another feature (child of $(hg log -r . -T '{node|short}'))"So here we are:: $ hg book feature-A 1:568a468b60fc * feature-B 2:73296a82292aFix The Second Patch--------------------There'satypoinfeature-B.Wespelled*Zwie*insteadof*Zwei*::$hgdiff--changetip|grep-FZwie+ZwieFixingthisisveryeasy.Justchange::$sed-i''-es/Zwie/Zwei/main-file-1and**amend**::$hgamendThisresultsinanewsinglechangesetforouramendedchangeset,andtheoldchangesetplustheupdatingchangesetarehiddenfromviewbydefault::$hglog4feature-B:anotherfeature(childof568a468b60fc)-test1feature-A:aniftyfeature-test0:base-test$hgupfeature-A-q$hgbookmark-ifeature-A$sed-i''-es/Eins/Un/main-file-1(amendofpublicchangesetdenied)$hgphase--public0-vphasechangedfor1changesets(amendofonancestors)$hgamend1newunstablechangesets$hglog6feature-A:aniftyfeature-test4feature-B:anotherfeature(childof568a468b60fc)-test1:aniftyfeature-test0:base-test$hgup-q0$glog--hiddeno6:ba0ec09b1bab@default(draft)aniftyfeature||x5:c296b79833d1@default(draft)temporaryamendcommitfor568a468b60fc||||o4:6992c59c6b06@default(draft)anotherfeature(childof568a468b60fc)||/||x3:c97947cdc7a2@default(draft)temporaryamendcommitfor73296a82292a|||||x2:73296a82292a@default(draft)anotherfeature(childof568a468b60fc)||/|x1:568a468b60fc@default(draft)aniftyfeature|/@0:e55e0562ee93@default(public)base$hgdebugobsolete73296a82292a76fb8a7061969d2489ec0d84cd5e6992c59c6b06a1b4a92e24ff884829ae026d018b0(*){'user':'test'}(glob)c97947cdc7a2a11cf78419f5c2c3dd3944ec79e80{73296a82292a76fb8a7061969d2489ec0d84cd5e}(*){'user':'test'}(glob)568a468b60fc99a42d5d4ddbe181caff1eef308dba0ec09b1babf3489b567853807f452edd46704f0(*){'user':'test'}(glob)c296b79833d1d497f33144786174bf35e04e44a30{568a468b60fc99a42d5d4ddbe181caff1eef308d}(*){'user':'test'}(glob)$hgevolvemove:[4]anotherfeature(childof568a468b60fc)atop:[6]aniftyfeaturemergingmain-file-1workingdirectoryisnowat5c9c8d9c2e4e$hglog7feature-B:anotherfeature(childofba0ec09b1bab)-test6feature-A:aniftyfeature-test0:base-testTestcommit-ooptions$hgup61filesupdated,0filesmerged,1filesremoved,0filesunresolved$hgrevert-r7--alladdingfile-from-Brevertingmain-file-1$sed-i''-es/Zwei/deux/main-file-1$hgcommit-m'another feature that rox'-o7creatednewhead$hglog8feature-B:anotherfeaturethatrox-test6feature-A:aniftyfeature-test0:base-testphasechangeturningobsoletechangesetpublicissueabumpedwarning$hgphase--hidden--public71newbumpedchangesetsallsolvingbumpedtroubled$hgglog@8feature-B:anotherfeaturethatrox-test||o7:anotherfeature(childofba0ec09b1bab)-test|/o6feature-A:aniftyfeature-test|o0:base-test$hgevolve--any--traceback--bumpedrecreate:[8]anotherfeaturethatroxatop:[7]anotherfeature(childofba0ec09b1bab)computingnewdiffcommittedas476d0454d60eworkingdirectoryisnowat476d0454d60e$hgglog@9feature-B:bumpedupdateto5c9c8d9c2e4e:-test|o7:anotherfeature(childofba0ec09b1bab)-test|o6feature-A:aniftyfeature-test|o0:base-test$hgdiff--hidden-r9-r8$hgdiff-r9^-r9diff--gita/main-file-1b/main-file-1---a/main-file-1+++b/main-file-1@@-3,1+3,1@@-Zwei+deux$hglog-r'bumped()'#nomorebumpedtestevolve--all$sed-i''-es/deux/to/main-file-1$hgcommit-m'dansk 2!'$sed-i''-es/Three/tre/main-file-1$hgcommit-m'dansk 3!'$hgupdate91filesupdated,0filesmerged,0filesremoved,0filesunresolved$sed-i''-es/Un/Én/main-file-1$hgcommit--amend-m'dansk!'2newunstablechangesets(ninjatestforthe{trouble}template:$hglog-G--template'{rev}{troubles}\n'@13||o11unstable|||o10unstable|||x9|/o7|o6|o0(/ninja)$hgevolve--all--tracebackmove:[10]dansk2!atop:[13]dansk!mergingmain-file-1move:[11]dansk3!atop:[14]dansk2!mergingmain-file-1workingdirectoryisnowatcfb5ebed336d$hgglog@15:dansk3!-test|o14:dansk2!-test|o13feature-B:dansk!-test|o7:anotherfeature(childofba0ec09b1bab)-test|o6feature-A:aniftyfeature-test|o0:base-test$cd..enablegeneraldelta$cat<<EOF>>$HGRCPATH>[format]>generaldelta=1>EOF$hginitalpha$cdalpha$echo'base'>firstfile$hgaddfirstfile$hgci-m'base'$cd..$hgclone-Ur0alphabetaaddingchangesetsaddingmanifestsaddingfilechangesadded1changesetswith1changesto1files$cdalpha$cat<<EOF>A>We>need>some>kind>of>file>big>enough>to>prevent>snapshot>.>yes>new>lines>are>useless>.>EOF$hgaddA$hgcommit-m'adding A'$hgmvAB$echo'.'>>B$hgamend-m'add B'$hgverifycheckingchangesetscheckingmanifestscrosscheckingfilesinchangesetsandmanifestscheckingfiles3files,4changesets,4totalrevisions$hg--configextensions.hgext.mq=strip'extinct()'abort:emptyrevisionset[255]$hg--configextensions.hgext.mq=strip--hidden'extinct()'savedbackupbundleto$TESTTMP/alpha/.hg/strip-backup/e87767087a57-d7bd82e9-backup.hg(glob)$hgverifycheckingchangesetscheckingmanifestscrosscheckingfilesinchangesetsandmanifestscheckingfiles2files,2changesets,2totalrevisions$cd..Clonejustthisbranch$cdbeta$hgpull-rtip../alphapullingfrom../alphasearchingforchangesaddingchangesetsaddingmanifestsaddingfilechangesadded1changesetswith1changesto1files2newobsolescencemarkers(run'hg update'togetaworkingcopy)$hgup2filesupdated,0filesmerged,0filesremoved,0filesunresolved$cd..Testgraft--obsolete/--old-obsolete$hginittest-graft$cdtest-graft$mkcommit0$mkcommit1$mkcommit2$mkcommit3$hgup-qC0$mkcommit4creatednewhead$glog--hidden@4:ce341209337f@default(draft)add4||o3:0e84df4912da@default(draft)add3|||o2:db038628b9e5@default(draft)add2|||o1:73d38bb17fd7@default(draft)add1|/o0:8685c6d34325@default(draft)add0$hggraft-r3-Ografting3:0e84df4912da"add 3"$hggraft-r1-o2grafting1:73d38bb17fd7"add 1"$glog--hidden@6:acb28cd497b7@default(draft)add1|o5:0b9e50c35132@default(draft)add3|o4:ce341209337f@default(draft)add4||x3:0e84df4912da@default(draft)add3|||x2:db038628b9e5@default(draft)add2|||o1:73d38bb17fd7@default(draft)add1|/o0:8685c6d34325@default(draft)add0$hgdebugobsolete0e84df4912da4c7cad22a3b4fcfd58ddfb7c8ae90b9e50c35132ff548ec0065caea6a87e1ebcef320(*){'user':'test'}(glob)db038628b9e56f51a454c0da0c508df247b41748acb28cd497b7f8767e01ef70f68697a959573c2d0(*){'user':'test'}(glob)Testgraft--continue$hgup-qC0$echo2>1$hgci-Amconflict1creatednewhead$hgup-qC6$hggraft-O7grafting7:a5bfd90a2f29"conflict"(tip)merging1warning:conflictsduringmerge.merging1incomplete!(editconflicts,thenuse'hg resolve --mark')abort:unresolvedconflicts,can't continue (use hg resolve and hg graft --continue) [255] $ hg log -r7 --template '{rev}:{node|short}{obsolete}\n' 7:a5bfd90a2f29 stable $ echo 3 > 1 $ hg resolve -m 1 (no more unresolved files) $ hg graft --continue -O grafting 7:a5bfd90a2f29 "conflict" (tip) $ glog --hidden @ 8:920e58bb443b@default(draft) conflict | | x 7:a5bfd90a2f29@default(draft) conflict | | o | 6:acb28cd497b7@default(draft) add 1 | | o | 5:0b9e50c35132@default(draft) add 3 | | o | 4:ce341209337f@default(draft) add 4 |/ | x 3:0e84df4912da@default(draft) add 3 | | | x 2:db038628b9e5@default(draft) add 2 | | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ hg debugobsolete 0e84df4912da4c7cad22a3b4fcfd58ddfb7c8ae9 0b9e50c35132ff548ec0065caea6a87e1ebcef32 0 (*) {'user': 'test'} (glob) db038628b9e56f51a454c0da0c508df247b41748 acb28cd497b7f8767e01ef70f68697a959573c2d 0 (*) {'user': 'test'} (glob) a5bfd90a2f29c7ccb8f917ff4e5013a9053d0a04 920e58bb443b73eea9d6d65570b4241051ea3229 0 (*) {'user': 'test'} (glob)Test touch $ glog @ 8:920e58bb443b@default(draft) conflict | o 6:acb28cd497b7@default(draft) add 1 | o 5:0b9e50c35132@default(draft) add 3 | o 4:ce341209337f@default(draft) add 4 | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ hg touch $ glog @ 9:*@default(draft) conflict (glob) | o 6:acb28cd497b7@default(draft) add 1 | o 5:0b9e50c35132@default(draft) add 3 | o 4:ce341209337f@default(draft) add 4 | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ hg touch . $ glog @ 10:*@default(draft) conflict (glob) | o 6:acb28cd497b7@default(draft) add 1 | o 5:0b9e50c35132@default(draft) add 3 | o 4:ce341209337f@default(draft) add 4 | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0Test fold $ rm *.orig $ hg fold abort: no revisions specified [255] $ hg fold . single revision specified, nothing to fold [1] $ hg fold 0::10 --rev 1 --exact abort: cannot fold non-linear revisions (multiple heads given) [255] $ hg fold -r 4 -r 6 --exact abort: cannot fold non-linear revisions (multiple roots given) [255] $ hg fold 10 1 abort: cannot fold non-linear revisions (given revisions are unrelated to parent of working directory) [255] $ hg phase --public 0 $ hg fold -r 0 abort: cannot fold public revisions [255] $ hg fold -r 5 3 changesets folded 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg fold 6 # want to run hg fold 6 abort: hidden revision '6'! (use --hidden to access hidden revisions) [255] $ hg log -r 11 --template '{desc}\n' add 3 add 1 conflict $ hg debugrebuildstate $ hg stTest fold with wc parent is not the head of the folded revision $ hg up 4 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg fold --rev 4::11 --user victor --exact 2 changesets folded 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ glog @ 12:d26d339c513f@default(draft) add 4 | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(public) add 0 $ hg log --template '{rev}:{author}\n' 12: victor 1: test 0: test $ hg log -r 12 --template '{desc}\n' add 4 add 3 add 1 conflict $ hg debugrebuildstate $ hg stTest olog $ hg olog 4 : add 4 - test 11 : add 3 - testTest obsstore stat $ hg debugobsstorestat markers total: 10 for known precursors: 10 with parents data: 0 markers with no successors: 0 1 successors: 10 2 successors: 0 more than 2 successors: 0 available keys: user: 10 disconnected clusters: 1 any known node: 1 smallest length: 10 longer length: 10 median length: 10 mean length: 10 using parents data: 1 any known node: 1 smallest length: 10 longer length: 10 median length: 10 mean length: 10Test evolving renames $ hg up null 0 files updated, 0 files merged, 4 files removed, 0 files unresolved $ echo a > a $ hg ci -Am a adding a created new head $ echo b > b $ hg ci -Am b adding b $ hg mv a c $ hg ci -m c $ hg kill .^ 1 changesets pruned 1 new unstable changesets $ hg stab --any move:[15] c atop:[13] a working directory is now at 3742bde73477 $ hg st -C --change=tip A c a R aTest fold with commit messages $ cd ../work $ hg fold .^ --message "Folding with custom commit message" 2 changesets folded 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ glog @ 16:d6239ff09c9f@default(draft) Folding with custom commit message | o 13:56ade053f46d@default(draft) dansk! | o 7:5c9c8d9c2e4e@default(public) another feature (child of ba0ec09b1bab) | o 6:ba0ec09b1bab@default(public) a nifty feature | o 0:e55e0562ee93@default(public) base $ cat > commit-message <<EOF>Alonger>commitmessage>EOF$hgfold.^--logfilecommit-message2changesetsfolded1filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgqlog17-dba606655966Alongercommitmessage(draft)7-5c9c8d9c2e4eanotherfeature(childofba0ec09b1bab)(public)6-ba0ec09b1babaniftyfeature(public)0-e55e0562ee93base(public)$cd..Testbranchpreservation:===========================$hginitevolving-branch$cdevolving-branch$toucha$hgadda$hgci-m'a0'$echo1>a$hgci-m'a1'$echo2>a$hgci-m'a2'$echo3>a$hgci-m'a3'$hglog-G--template'{rev} [{branch}] {desc|firstline}\n'@3[default]a3|o2[default]a2|o1[default]a1|o0[default]a0branchchangepropagated$hgup'desc(a2)'1filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgbranchmybranchmarkedworkingdirectoryasbranchmybranch(branchesarepermanentandglobal,didyouwantabookmark?)$hgamend1newunstablechangesets$hgevolvemove:[3]a3atop:[5]a2workingdirectoryisnowat7c5649f73d11$hglog-G--template'{rev} [{branch}] {desc|firstline}\n'@6[mybranch]a3|o5[mybranch]a2|o1[default]a1|o0[default]a0branchchangepreserved$hgup'desc(a1)'1filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgamend-m'a1_'2newunstablechangesets$hgevolvemove:[5]a2atop:[7]a1_workingdirectoryisnowat5406c5cfee42$hgevolvemove:[6]a3atop:[8]a2workingdirectoryisnowatc7661e655801$hglog-G--template'{rev} [{branch}] {desc|firstline}\n'@9[mybranch]a3|o8[mybranch]a2|o7[default]a1_|o0[default]a0Evolvefromthemiddleofastackpicktherightchangesets.$hgup71filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgci--amend-m'a1__'2newunstablechangesets$hgup81filesupdated,0filesmerged,0filesremoved,0filesunresolved$hglog-G--template'{rev} [{branch}] {desc|firstline}\n'o10[default]a1__||o9[mybranch]a3|||@8[mybranch]a2|||x7[default]a1_|/o0[default]a0$hgevolvenothingtoevolveoncurrentworkingcopyparent(2otherunstableintherepository,doyouwant--anyor--rev)[2]Evolvedisablesactivebookmarks.$hgup101filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgbookmarktestbookmark$ls.hg/bookmarks*.hg/bookmarks.hg/bookmarks.*(glob)$hgevolvemove:[8]a2atop:[10]a1__(leavingbookmarktestbookmark)workingdirectoryisnowatf37ed7a60f43$ls.hg/bookmarks*.hg/bookmarksPossibilitytoselectwhattroubletosolvefirst,askingforbumpedbeforedivergent$hgup101filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgrevert-r11--allrevertinga$hglog-G--template'{rev} [{branch}] {desc|firstline}\n'o11[mybranch]a2|@10[default]a1__||o9[mybranch]a3|||x8[mybranch]a2|||x7[default]a1_|/o0[default]a0$echo"hello world">newfile$hgaddnewfile$hgcommit-m"add new file bumped"-o11$hgphase--public--hidden111newbumpedchangesets$hgglog@12:addnewfilebumped-test||o11:a2-test|/o10testbookmark:a1__-test||o9:a3-test|||x8:a2-test|||x7:a1_-test|/o0:a0-testNowwehaveabumpedandanunstablechangeset,wesolvethebumpedfirstnormallytheunstablechangesetwouldbesolvefirst$hgglog@12:addnewfilebumped-test||o11:a2-test|/o10testbookmark:a1__-test||o9:a3-test|||x8:a2-test|||x7:a1_-test|/o0:a0-test$hgevolve-r12--bumpedrecreate:[12]addnewfilebumpedatop:[11]a2computingnewdiffcommittedasd66b1e328488workingdirectoryisnowatd66b1e328488$hgevolve--anymove:[9]a3atop:[13]bumpedupdatetof37ed7a60f43:workingdirectoryisnowat7d2ce5f38f9bCheckthatwecanresolvetroublesinarevsetwithmorethanonecommit$hgup14-C0filesupdated,0filesmerged,0filesremoved,0filesunresolved$mkcommitgg$hgup140filesupdated,0filesmerged,1filesremoved,0filesunresolved$mkcommitghcreatednewhead$hgup140filesupdated,0filesmerged,1filesremoved,0filesunresolved$printf"newline\nnewline\n">>a$hgglogo16:addgh-test||o15:addgg-test|/@14:a3-test|o13:bumpedupdatetof37ed7a60f43:-test|o11:a2-test|o10testbookmark:a1__-test|o0:a0-test$hgamend2newunstablechangesets$hgglog@18:a3-test||o16:addgh-test||||o15:addgg-test||/|x14:a3-test|/o13:bumpedupdatetof37ed7a60f43:-test|o11:a2-test|o10testbookmark:a1__-test|o0:a0-testEvolvinganemptyrevsetshoulddonothing$hgevolve--rev"16 and 15"setofspecifiedrevisionsisempty[1]$hgevolve--rev"14::"--bumpednobumpedchangesetsinspecifiedrevisions(doyouwanttouse--unstable)[2]$hgevolve--rev"14::"--unstablemove:[15]addggatop:[18]a3move:[16]addghatop:[18]a3workingdirectoryisnowatdb3d894869b0$hgglog@20:addgh-test||o19:addgg-test|/o18:a3-test|o13:bumpedupdatetof37ed7a60f43:-test|o11:a2-test|o10testbookmark:a1__-test|o0:a0-testEnablingcommandsselectively,nocommandenabled,nextandfoldandunknown$cat>>$HGRCPATH<<EOF>[experimental]>evolution=createmarkers>EOF$hgnexthg:unknowncommand'next'MercurialDistributedSCMbasiccommands:addaddthespecifiedfilesonthenextcommitannotateshowchangesetinformationbylineforeachfileclonemakeacopyofanexistingrepositorycommitcommitthespecifiedfilesoralloutstandingchangesdiffdiffrepository(orselectedfiles)exportdumptheheaderanddiffsforoneormorechangesetsforgetforgetthespecifiedfilesonthenextcommitinitcreateanewrepositoryinthegivendirectorylogshowrevisionhistoryofentirerepositoryorfilesmergemergeanotherrevisionintoworkingdirectorypullpullchangesfromthespecifiedsourcepushpushchangestothespecifieddestinationremoveremovethespecifiedfilesonthenextcommitservestartstand-alonewebserverstatusshowchangedfilesintheworkingdirectorysummarysummarizeworkingdirectorystateupdateupdateworkingdirectory(orswitchrevisions)(use"hg help"forthefulllistofcommandsor"hg -v"fordetails)[255]$hgfoldhg:unknowncommand'fold'MercurialDistributedSCMbasiccommands:addaddthespecifiedfilesonthenextcommitannotateshowchangesetinformationbylineforeachfileclonemakeacopyofanexistingrepositorycommitcommitthespecifiedfilesoralloutstandingchangesdiffdiffrepository(orselectedfiles)exportdumptheheaderanddiffsforoneormorechangesetsforgetforgetthespecifiedfilesonthenextcommitinitcreateanewrepositoryinthegivendirectorylogshowrevisionhistoryofentirerepositoryorfilesmergemergeanotherrevisionintoworkingdirectorypullpullchangesfromthespecifiedsourcepushpushchangestothespecifieddestinationremoveremovethespecifiedfilesonthenextcommitservestartstand-alonewebserverstatusshowchangedfilesintheworkingdirectorysummarysummarizeworkingdirectorystateupdateupdateworkingdirectory(orswitchrevisions)(use"hg help"forthefulllistofcommandsor"hg -v"fordetails)[255]Enablingcommandsselectively,onlyfoldenabled,nextisstillunknown$cat>>$HGRCPATH<<EOF>[experimental]>evolution=createmarkers>evolutioncommands=fold>EOF$hgfoldabort:norevisionsspecified[255]$hgnexthg:unknowncommand'next'MercurialDistributedSCMbasiccommands:addaddthespecifiedfilesonthenextcommitannotateshowchangesetinformationbylineforeachfileclonemakeacopyofanexistingrepositorycommitcommitthespecifiedfilesoralloutstandingchangesdiffdiffrepository(orselectedfiles)exportdumptheheaderanddiffsforoneormorechangesetsfoldfoldmultiplerevisionsintoasingleoneforgetforgetthespecifiedfilesonthenextcommitinitcreateanewrepositoryinthegivendirectorylogshowrevisionhistoryofentirerepositoryorfilesmergemergeanotherrevisionintoworkingdirectorypullpullchangesfromthespecifiedsourcepushpushchangestothespecifieddestinationremoveremovethespecifiedfilesonthenextcommitservestartstand-alonewebserverstatusshowchangedfilesintheworkingdirectorysummarysummarizeworkingdirectorystateupdateupdateworkingdirectory(orswitchrevisions)(use"hg help"forthefulllistofcommandsor"hg -v"fordetails)[255]Restorealloftheevolutionfeatures$cat>>$HGRCPATH<<EOF>[experimental]>evolution=all>EOFCheckhgevolve--revonsingledoutcommit$hgup19-C1filesupdated,0filesmerged,1filesremoved,0filesunresolved$mkcommitj1$mkcommitj2$mkcommitj3$hgup.^^0filesupdated,0filesmerged,2filesremoved,0filesunresolved$echo"hello">j4$hgaddj4$hgamend2newunstablechangesets$glog-r"18::"@25:4c0bc042ef3b@default(draft)addj1||o23:c70048fd3350@default(draft)addj3|||o22:714e60ca57b7@default(draft)addj2|||x21:b430835af718@default(draft)addj1|/|o20:db3d894869b0@default(draft)addgh||o|19:10ffdd7e3cc9@default(draft)addgg|/o18:0bb66d4c1968@default(draft)a3|$hgevolve--rev23--anyabort:cannotspecifyboth"--rev"and"--any"[255]$hgevolve--rev23cannotsolveinstabilityofc70048fd3350,skippingCheckthatuncommitrespectstheallowunstableoptionWithonlycreatemarkerswecanonlyuncommitonahead$cat>>$HGRCPATH<<EOF>[experimental]>evolution=createmarkers,allnewcommands>EOF$hgup4c0bc042ef3b^0filesupdated,0filesmerged,2filesremoved,0filesunresolved$hguncommit--allabort:cannotuncommitinthemiddleofastack[255]$hgup4c0bc042ef3b2filesupdated,0filesmerged,0filesremoved,0filesunresolved$hguncommit--allnewchangesetisempty(use"hg prune ."toremoveit)$glog-r"18::"@26:04b32348803e@default(draft)addj1||o23:c70048fd3350@default(draft)addj3|||o22:714e60ca57b7@default(draft)addj2|||x21:b430835af718@default(draft)addj1|/|o20:db3d894869b0@default(draft)addgh||o|19:10ffdd7e3cc9@default(draft)addgg|/o18:0bb66d4c1968@default(draft)a3|Checkthatprunerespectstheallowunstableoption$hgup-C.0filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgup201filesupdated,0filesmerged,1filesremoved,0filesunresolved$hgevolve--allnothingtoevolveoncurrentworkingcopyparent(2otherunstableintherepository,doyouwant--anyor--rev)[2]$hgevolve--all--anymove:[22]addj2atop:[26]addj1move:[23]addj3atop:[27]addj2workingdirectoryisnowat920a35e8dbd0$glog-r"18::"@28:920a35e8dbd0@default(draft)addj3|o27:31e050d895dd@default(draft)addj2|o26:04b32348803e@default(draft)addj1||o20:db3d894869b0@default(draft)addgh||o|19:10ffdd7e3cc9@default(draft)addgg|/o18:0bb66d4c1968@default(draft)a3|$hgup190filesupdated,0filesmerged,2filesremoved,0filesunresolved$mkcommitc5_creatednewhead$hgprune'26 + 27'abort:cannotpruneinthemiddleofastack[255]$hgprune'19::28'abort:cannotpruneinthemiddleofastack[255]$hgprune'26::'3changesetspruned$glog-r"18::"@29:5a6c53544778@default(draft)addc5_||o20:db3d894869b0@default(draft)addgh||o|19:10ffdd7e3cc9@default(draft)addgg|/o18:0bb66d4c1968@default(draft)a3|Checkthatfoldrespectstheallowunstableoption$hgup0bb66d4c19680filesupdated,0filesmerged,2filesremoved,0filesunresolved$mkcommitunstableifparentisfoldedcreatednewhead$glog-r"18::"@30:30ecefd67c0a@default(draft)addunstableifparentisfolded||o29:5a6c53544778@default(draft)addc5_||+---o20:db3d894869b0@default(draft)addgh|||o19:10ffdd7e3cc9@default(draft)addgg|/o18:0bb66d4c1968@default(draft)a3|$hgfold--exact"19 + 18"abort:cannotfoldchainnotendingwithaheadorwithbranching[255]$hgfold--exact"18::29"abort:cannotfoldchainnotendingwithaheadorwithbranching[255]$hgfold--exact"19::"2changesetsfoldedCheckthatevolveshowserrorwhilehandlingsplitcommits--------------------------------------$cat>>$HGRCPATH<<EOF>[experimental]>evolution=all>EOF$glog-r"18::"o31:5cc6eda0f00d@default(draft)addgg||@30:30ecefd67c0a@default(draft)addunstableifparentisfolded|/|o20:db3d894869b0@default(draft)addgh|/o18:0bb66d4c1968@default(draft)a3|Createasplitcommit$printf"oo">oo;$printf"pp">pp;$hgaddoopp$hgcommit-m"oo+pp"$mkcommituu$hgup300filesupdated,0filesmerged,3filesremoved,0filesunresolved$printf"oo">oo;$hgaddoo$hgcommit-m"_oo"creatednewhead$printf"pp">pp;$hgaddpp$hgcommit-m"_pp"$hgprune--succ"desc(_oo) + desc(_pp)"-r"desc('oo+pp')"--split1changesetspruned1newunstablechangesets$glog-r"18::"@35:072908d77206@default(draft)_pp|o34:68e429987343@default(draft)_oo||o33:030868870864@default(draft)adduu|||x32:7e9688cf0a1b@default(draft)oo+pp|/|o31:5cc6eda0f00d@default(draft)addgg||o|30:30ecefd67c0a@default(draft)addunstableifparentisfolded|/|o20:db3d894869b0@default(draft)addgh|/o18:0bb66d4c1968@default(draft)a3|$hgevolve--rev"18::"move:[33]adduuatop:[35]_ppworkingdirectoryisnowat04fae07745d4