exchange: use fixed order for obstore content
The obsstore content seems unstable from one version of python to another (we
most certainly use some dict) we fix the order once and for all.
$cat>>$HGRCPATH<<EOF>[defaults]>amend=-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.rebase=>hgext.graphlog=>EOF$echo"evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py">>$HGRCPATH$mkcommit(){>echo"$1">"$1">hgadd"$1">hgci-m"add $1">}$glog(){>hgglog--template'{rev}:{node|short}@{branch}({phase}) {desc|firstline}\n'"$@">}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.1changesetspruned0filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowatfbb94e3a0ecf$hgqlog4-fbb94e3a0ecfadde(draft)3-47d2a3944de8addd(draft)2-4538525df7e2addc(draft)1-7c3bad9141dcaddb(public)0-1f0dee641bb7adda(public)testmultiplekill$hgkill4-r32changesetspruned0filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowat7c3bad9141dc$hgqlog2-4538525df7e2addc(draft)1-7c3bad9141dcaddb(public)0-1f0dee641bb7adda(public)testkillwithdirtychanges$hgup21filesupdated,0filesmerged,0filesremoved,0filesunresolved$echo4>g$hgaddg$hgkill.1changesetspruned0filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowat7c3bad9141dc$hgstAg$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"So here we are:: $ hg book feature-A 1:568a468b60fc * feature-B 2:7b36850622b2Fix 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-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-test1:aniftyfeature-test0:base-test$hgup-q0$glog--hiddeno6:ba0ec09b1bab@default(draft)aniftyfeature||x5:c296b79833d1@default(draft)temporaryamendcommitfor568a468b60fc||||o4:207cbc4ea7fe@default(draft)anotherfeature||/||x3:5bb880fc0f12@default(draft)temporaryamendcommitfor7b36850622b2|||||x2:7b36850622b2@default(draft)anotherfeature||/|x1:568a468b60fc@default(draft)aniftyfeature|/@0:e55e0562ee93@default(public)base$hgdebugobsolete7b36850622b2fd159fa30a4fb2a1edd2043b4a14207cbc4ea7fee30d18b3a25f534fe5db22c6071b0{'date':'* *','user':'test'}(glob)5bb880fc0f12dd61eee6de36f62b93fdbc3684b00{'date':'* *','user':'test'}(glob)568a468b60fc99a42d5d4ddbe181caff1eef308dba0ec09b1babf3489b567853807f452edd46704f0{'date':'* *','user':'test'}(glob)c296b79833d1d497f33144786174bf35e04e44a30{'date':'* *','user':'test'}(glob)$hgevolvemove:[4]anotherfeatureatop:[6]aniftyfeaturemergingmain-file-1$hglog7feature-B:anotherfeature-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-test|/o6feature-A:aniftyfeature-test|o0:base-test$hgevolve--any--tracebackrecreate:[8]anotherfeaturethatroxatop:[7]anotherfeaturecomputingnewdiffcommitedasca3b75e3e59b$hgglog@9feature-B:bumpedupdatetoabe98aeaaa35:-test|o7:anotherfeature-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$hgevolve--all--tracebackmove:[10]dansk2!atop:[13]dansk!mergingmain-file-1move:[11]dansk3!atop:[14]dansk2!mergingmain-file-1$hgglog@15:dansk3!-test|o14:dansk2!-test|o13feature-B:dansk!-test|o7:anotherfeature-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-Ur0alphabetaaddingchangesetsaddingmanifestsaddingfilechangesadded1changesetswith1changesto1filesOBSEXC:pullobsolescencemarkersOBSEXC:nounknownremotemarkersOBSEXC:DONE$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-backup.hg$hgverifycheckingchangesetscheckingmanifestscrosscheckingfilesinchangesetsandmanifestscheckingfiles2files,2changesets,2totalrevisions$cd..Clonejustthisbranch$cdbeta$hgpull-rtip../alphapullingfrom../alphasearchingforchangesaddingchangesetsaddingmanifestsaddingfilechangesadded1changesetswith1changesto1filesOBSEXC:pullobsolescencemarkersOBSEXC:mergingobsolescencemarkers(171bytes)OBSEXC:2markersaddedOBSEXC:DONE(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-Ograftingrevision3$hggraft-r1-o2graftingrevision1$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{'date':'* *','user':'test'}(glob)db038628b9e56f51a454c0da0c508df247b41748acb28cd497b7f8767e01ef70f68697a959573c2d0{'date':'* *','user':'test'}(glob)Testgraft--continue$hgup-qC0$echo2>1$hgci-Amconflict1creatednewhead$hgup-qC6$hggraft-O7graftingrevision7merging1warning: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 $ hg graft --continue -O grafting revision 7 $ 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 {'date': '**', 'user': 'test'} (glob) db038628b9e56f51a454c0da0c508df247b41748 acb28cd497b7f8767e01ef70f68697a959573c2d 0 {'date': '**', 'user': 'test'} (glob) a5bfd90a2f29c7ccb8f917ff4e5013a9053d0a04 920e58bb443b73eea9d6d65570b4241051ea3229 0 {'date': '**', '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 no revision to fold [1] $ hg fold 6 --rev 10 abort: cannot specify both --rev and a target revision [255] $ hg fold 6 # want to run hg fold 6 2 changesets folded 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ glog @ 11:*@default(draft) add 1 (glob) | 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 log -r 11 --template '{desc}\n' 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 3 changesets folded 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ glog @ 12:*@default(draft) add 4 (glob) | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ 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 5 : add 3 - test 11 : add 1 - 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 average meta length: 27 available keys: date: 10 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: 10