touch: prompt the user for what to do with the revived changeset
This patch improves our interface for reviving changesets.
This patch makes touch not assume that the user wants to create divergence by
default and gives a prompt instead. The prompt is skipped for changeset that
have no living successor as no divergence would be created by reviving them
anyway.
To restore the previous behavior, one should now use the --allowdivergence flag.
The prompt looks like:
[10] <description>
reviving this changeset will create divergence unless you make a duplicate.
(a)llow divergence or (d)uplicate the changeset? a
In further patches we will want to add one more choice to that prompt, for
example having a marker between the old and revived nodes but no divergence
displayed on the UI.
$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-1workingdirectoryisnowat99833d22b0c6$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)computingnewdiffcommittedas2d8c5414e9f0workingdirectoryisnowat2d8c5414e9f0$hgglog@9feature-B:bumpedupdateto99833d22b0c6:-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-1workingdirectoryisnowat536984593824$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:conflictswhilemerging1!(edit,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) continue: hg graft --continue $ 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:d1297ecc971f@default(draft) Folding with custom commit message | o 13:27b934eaf1f9@default(draft) dansk! | o 7:99833d22b0c6@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-0b1eca0e871bAlongercommitmessage(draft)7-99833d22b0c6anotherfeature(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_workingdirectoryisnowateb07e22a0e63$hgevolvemove:[6]a3atop:[8]a2workingdirectoryisnowat777c26ca5e78$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)workingdirectoryisnowatd952e93add6f$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]a2computingnewdiffcommittedasf15d32934071workingdirectoryisnowatf15d32934071$hgevolve--anymove:[9]a3atop:[13]bumpedupdatetod952e93add6f:workingdirectoryisnowatcce26b684bfeCheckthatwecanresolvetroublesinarevsetwithmorethanonecommit$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:bumpedupdatetod952e93add6f:-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:bumpedupdatetod952e93add6f:-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]a3workingdirectoryisnowate02107f98737$hgglog@20:addgh-test||o19:addgg-test|/o18:a3-test|o13:bumpedupdatetod952e93add6f:-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:8dc373be86d9@default(draft)addj1||o23:d7eadcf6eccd@default(draft)addj3|||o22:2223ea564144@default(draft)addj2|||x21:48490698b269@default(draft)addj1|/|o20:e02107f98737@default(draft)addgh||o|19:24e63b319adf@default(draft)addgg|/o18:edc3c9de504e@default(draft)a3|$hgevolve--rev23--anyabort:cannotspecifyboth"--rev"and"--any"[255]$hgevolve--rev23cannotsolveinstabilityofd7eadcf6eccd,skippingCheckthatuncommitrespectstheallowunstableoptionWithonlycreatemarkerswecanonlyuncommitonahead$cat>>$HGRCPATH<<EOF>[experimental]>evolution=createmarkers,allnewcommands>EOF$hgup8dc373be86d9^0filesupdated,0filesmerged,2filesremoved,0filesunresolved$hguncommit--allabort:cannotuncommitinthemiddleofastack[255]$hgup8dc373be86d92filesupdated,0filesmerged,0filesremoved,0filesunresolved$hguncommit--allnewchangesetisempty(use"hg prune ."toremoveit)$glog-r"18::"@26:044804d0c10d@default(draft)addj1||o23:d7eadcf6eccd@default(draft)addj3|||o22:2223ea564144@default(draft)addj2|||x21:48490698b269@default(draft)addj1|/|o20:e02107f98737@default(draft)addgh||o|19:24e63b319adf@default(draft)addgg|/o18:edc3c9de504e@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]addj2workingdirectoryisnowatc9a20e2d74aa$glog-r"18::"@28:c9a20e2d74aa@default(draft)addj3|o27:b0e3066231e2@default(draft)addj2|o26:044804d0c10d@default(draft)addj1||o20:e02107f98737@default(draft)addgh||o|19:24e63b319adf@default(draft)addgg|/o18:edc3c9de504e@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:2251801b6c91@default(draft)addc5_||o20:e02107f98737@default(draft)addgh||o|19:24e63b319adf@default(draft)addgg|/o18:edc3c9de504e@default(draft)a3|Checkthatfoldrespectstheallowunstableoption$hgupedc3c9de504e0filesupdated,0filesmerged,2filesremoved,0filesunresolved$mkcommitunstableifparentisfoldedcreatednewhead$glog-r"18::"@30:68330ac625b8@default(draft)addunstableifparentisfolded||o29:2251801b6c91@default(draft)addc5_||+---o20:e02107f98737@default(draft)addgh|||o19:24e63b319adf@default(draft)addgg|/o18:edc3c9de504e@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:580886d07058@default(draft)addgg||@30:68330ac625b8@default(draft)addunstableifparentisfolded|/|o20:e02107f98737@default(draft)addgh|/o18:edc3c9de504e@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:7a555adf2b4a@default(draft)_pp|o34:2be4d2d5bf34@default(draft)_oo||o33:53f0c003e03e@default(draft)adduu|||x32:1bf2152f4f82@default(draft)oo+pp|/|o31:580886d07058@default(draft)addgg||o|30:68330ac625b8@default(draft)addunstableifparentisfolded|/|o20:e02107f98737@default(draft)addgh|/o18:edc3c9de504e@default(draft)a3|$hgevolve--rev"18::"move:[33]adduuatop:[35]_ppworkingdirectoryisnowat43c3f5ef149f