$cat>>$HGRCPATH<<EOF>[ui]>logtemplate={rev}:{node|short}{desc}\n>[experimental]>prunestrip=True>evolution=createmarkers>[extensions]>rebase=>strip=>EOF$echo"evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/">>$HGRCPATH$echo"directaccess=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/hack/directaccess.py">>$HGRCPATH$echo"inhibit=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/hack/inhibit.py">>$HGRCPATH$mkcommit(){>echo"$1">"$1">hgadd"$1">hgci-m"add $1">}$hginitinhibit$cdinhibit$mkcommitcA$mkcommitcB$mkcommitcC$mkcommitcD$hgup'desc(cA)'0filesupdated,0filesmerged,3filesremoved,0filesunresolved$mkcommitcEcreatednewhead$mkcommitcG$mkcommitcH$mkcommitcJ$hglog-G@7:18214586bf78addcJ|o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE||o3:2db36d8066ffaddcD|||o2:7df62a38b9bfaddcC|||o1:02bcbc3f6e56addcB|/o0:54ccbc537fc2addcAplainprune$hgstrip1::3changesetspruned$hglog-G@7:18214586bf78addcJ|o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$hgdebugobsinhibit--hidden1::$hglog-G@7:18214586bf78addcJ|o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE||o3:2db36d8066ffaddcD|||o2:7df62a38b9bfaddcC|||o1:02bcbc3f6e56addcB|/o0:54ccbc537fc2addcA$hgstrip--hidden1::3changesetspruned$hglog-G@7:18214586bf78addcJ|o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcAafteramend$echobabar>cJ$hgcommit--amend$hglog-G@9:55c73a90e4b4addcJ|o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$hgdebugobsinhibit--hidden18214586bf78$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcAandnodivergence$hgsummaryparent:9:55c73a90e4b4tipaddcJbranch:defaultcommit:(clean)update:1newchangesets,2branchheads(merge)phases:6draftcheckpublicrevisiongotcleared(whenaddingthesecondinhibitor,thefirstoneisremovedbecauseitispublic)$wc-m.hg/store/obsinhibit|sed-e's/^[ \t]*//'20.hg/store/obsinhibit$hgstrip71changesetspruned$hgdebugobsinhibit--hidden18214586bf78$wc-m.hg/store/obsinhibit|sed-e's/^[ \t]*//'20.hg/store/obsinhibit$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$hgphase--public7$hgstrip90filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowatcf5c4f4554ce1changesetspruned$hglog-Go7:18214586bf78addcJ|@6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$hgdebugobsinhibit--hidden55c73a90e4b4$wc-m.hg/store/obsinhibit|sed-e's/^[ \t]*//'20.hg/store/obsinhibit$hglog-Go9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/@6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcAUpdateshouldinhibitallrelatedunstablecommits$hgupdate2--hidden2filesupdated,0filesmerged,3filesremoved,0filesunresolved$hglog-Go9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE||@2:7df62a38b9bfaddcC|||o1:02bcbc3f6e56addcB|/o0:54ccbc537fc2addcA$hgupdate94filesupdated,0filesmerged,2filesremoved,0filesunresolved$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE||o2:7df62a38b9bfaddcC|||o1:02bcbc3f6e56addcB|/o0:54ccbc537fc2addcA$hgstrip--hidden1::3changesetspruned$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcABookmarkshouldinhibitallrelatedunstablecommits$hgbookmark-r2book1--hidden$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE||o2:7df62a38b9bfaddcC|||o1:02bcbc3f6e56addcB|/o0:54ccbc537fc2addcARemovingabookmarkwithbookmark-Dshouldprunethechangesunderneaththatarenotreachablefromanotherbookmarkorhead$hgbookmark-r1book2$hgbookmark-Dbook1--configexperimental.evolution=createmarkers#--configtomakesurepruneisnotregisteredasacommand.bookmark'book1'deleted1changesetspruned$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE||o1:02bcbc3f6e56addcB|/o0:54ccbc537fc2addcA$hgbookmark-Dbook2bookmark'book2'deleted1changesetspruned$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcATestedgecasesofbookmark-D$hgbook-Dbook2-mhelloabort:Cannotuseboth-mand-D[255]$hgbook-Draster-fixabort:Error,pleasecheckyourcommand(makesuretoputaspacebetween-Dandyourbookmarkname)[255]Testthatdirectaccessmakechangesetsvisible$hgexport2db36d8066ff02bcbc3f6e56#HGchangesetpatch#Usertest # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 2db36d8066ff50e8be3d3e6c2da1ebc0a8381d82 # Parent 7df62a38b9bf9daf968de235043ba88a8ef43393addcDdiff-r7df62a38b9bf-r2db36d8066ffcD---/dev/nullThuJan0100:00:001970+0000+++b/cDThuJan0100:00:001970+0000@@-0,0+1,1@@+cD # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 02bcbc3f6e56fb2928efec2c6e24472720bf5511 # Parent 54ccbc537fc2d6845a5d61337c1cfb80d1d2815eaddcBdiff-r54ccbc537fc2-r02bcbc3f6e56cB---/dev/nullThuJan0100:00:001970+0000+++b/cBThuJan0100:00:001970+0000@@-0,0+1,1@@+cBButonlywithhash$hgexport2db36d8066ff:: # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 2db36d8066ff50e8be3d3e6c2da1ebc0a8381d82 # Parent 7df62a38b9bf9daf968de235043ba88a8ef43393addcDdiff-r7df62a38b9bf-r2db36d8066ffcD---/dev/nullThuJan0100:00:001970+0000+++b/cDThuJan0100:00:001970+0000@@-0,0+1,1@@+cD$hgexport13abort:hiddenrevision'1'!(use--hiddentoaccesshiddenrevisions)[255]Testdirectaccessinalargerrevset$hglog-r'. + .^ + 2db36d8066ff'-T'{node|short}\n'55c73a90e4b4cf5c4f4554ce2db36d8066ffTestdirectaccessonlytakeshashes$HOOKPATH=$TESTTMP/printexplicitaccess.py$cat>>$HOOKPATH<<EOF>defhook(ui,repo,**kwds):>foriinsorted(repo._explicitaccess):>ui.write('directaccess: %s\n'%i)>EOF$hglog-r1-r2-r2db36d8066f-T'{rev}\n'--confighooks.post-log=python:$HOOKPATH:hook123directaccess:3Withseveralshiddensha,rebaseofonehiddenstackontoanotherone:$hgupdate-C00filesupdated,0filesmerged,4filesremoved,0filesunresolved$mkcommitcKcreatednewhead$mkcommitcL$hgupdate-C94filesupdated,0filesmerged,2filesremoved,0filesunresolved$hglog-Go11:53a94305e133addcL|o10:ad78ff7d621faddcK||@9:55c73a90e4b4addcJ||||o7:18214586bf78addcJ||/|o6:cf5c4f4554ceaddcH|||o5:5419eb264a33addcG|||o4:98065434e5c6addcE|/o0:54ccbc537fc2addcA$hgstrip--hidden10:2changesetspruned$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$hgrebase-s10-d3abort:hiddenrevision'3'!(use--hiddentoaccesshiddenrevisions)[255]$hgrebase-rad78ff7d621f-r53a94305e133-d2db36d8066ff--configexperimental.rebaseskipobsolete=0Warning:accessinghiddenchangesets2db36d8066ffforwriteoperationWarning:accessinghiddenchangesetsad78ff7d621f,53a94305e133forwriteoperationrebasing10:ad78ff7d621f"add cK"rebasing11:53a94305e133"add cL"$hglog-Go13:2f7b7704d714addcL|o12:fe1634cbe235addcK||@9:55c73a90e4b4addcJ||||o7:18214586bf78addcJ||/|o6:cf5c4f4554ceaddcH|||o5:5419eb264a33addcG|||o4:98065434e5c6addcE||o|3:2db36d8066ffaddcD||o|2:7df62a38b9bfaddcC||o|1:02bcbc3f6e56addcB|/o0:54ccbc537fc2addcACheckthatamendinginthemiddleofastackdoesnotshowobsoleterevsSincewearedoingoperationinthemiddleofthestackwecannotjusthavecreatemarkersaswearecreatinginstability$cat>>$HGRCPATH<<EOF>[experimental]>evolution=all>EOF$hgstrip--hidden1::5changesetspruned$hglog-G@9:55c73a90e4b4addcJ||o7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$hgup71filesupdated,0filesmerged,0filesremoved,0filesunresolved$mkcommitcL$mkcommitcM$mkcommitcN$hglog-G@16:a438c045eb37addcN|o15:2d66e189f5b5addcM|o14:d66ccb8c5871addcL||o9:55c73a90e4b4addcJ||o|7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$hgup150filesupdated,0filesmerged,1filesremoved,0filesunresolved$echo"mmm">>cM$hgamend$hglog-G@18:210589181b14addcM||o16:a438c045eb37addcN|||o15:2d66e189f5b5addcM|/o14:d66ccb8c5871addcL||o9:55c73a90e4b4addcJ||o|7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcACheckthatrebasingacommittwicemakesthecommitvisibleagain$hgrebase-d18-r16--keeprebasing16:a438c045eb37"add cN"$hglog-r14::-Go19:104eed5354c7addcN|@18:210589181b14addcM||o16:a438c045eb37addcN|||o15:2d66e189f5b5addcM|/o14:d66ccb8c5871addcL|~$hgstrip-r210589181b140filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowatd66ccb8c58712changesetsprunedUsingahashprefixsolelymadeofdigitsshouldwork$hgupdate2105891811filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgrebase-d18-r16--keeprebasing16:a438c045eb37"add cN"$hglog-r14::-Go19:104eed5354c7addcN|@18:210589181b14addcM||o16:a438c045eb37addcN|||o15:2d66e189f5b5addcM|/o14:d66ccb8c5871addcL|~Testprunestrip$hgbookfoo-r104eed5354c7$hgstrip-r210589181b140filesupdated,0filesmerged,1filesremoved,0filesunresolvedworkingdirectorynowatd66ccb8c58712changesetspruned$hglog-r14::-G-T'{rev}:{node|short}{desc|firstline}{bookmarks}\n'o16:a438c045eb37addcN|o15:2d66e189f5b5addcM|@14:d66ccb8c5871addcLfoo|~Checkthat--hiddenusedwithinhibitdoesnothideeveryobsoletecommitWeshowthelogbeforeandafteralog-G--hidden,theyshouldbethesame$hglog-Go16:a438c045eb37addcN|o15:2d66e189f5b5addcM|@14:d66ccb8c5871addcL||o9:55c73a90e4b4addcJ||o|7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$hglog-G--hiddenx19:104eed5354c7addcN|x18:210589181b14addcM||x17:b3c3274523f9temporaryamendcommitfor2d66e189f5b5||||o16:a438c045eb37addcN||/|o15:2d66e189f5b5addcM|/@14:d66ccb8c5871addcL||x13:2f7b7704d714addcL|||x12:fe1634cbe235addcK||||x11:53a94305e133addcL|||||x10:ad78ff7d621faddcK||||||o9:55c73a90e4b4addcJ||||+-------x8:e84f73d9ad36temporaryamendcommitfor18214586bf78||||o-----+7:18214586bf78addcJ///||o6:cf5c4f4554ceaddcH|||||o5:5419eb264a33addcG|||||o4:98065434e5c6addcE||/x|3:2db36d8066ffaddcD||x|2:7df62a38b9bfaddcC||x|1:02bcbc3f6e56addcB|/o0:54ccbc537fc2addcA$hglog-Go16:a438c045eb37addcN|o15:2d66e189f5b5addcM|@14:d66ccb8c5871addcL||o9:55c73a90e4b4addcJ||o|7:18214586bf78addcJ|/o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcAcheckthatpruningandinhibitednodedoesnotconfuseanything$hgup--hidden210589181b141filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgstrip--bundle210589181b140filesupdated,0filesmerged,1filesremoved,0filesunresolvedsavedbackupbundleto$TESTTMP/inhibit/.hg/strip-backup/210589181b14-e09c7b88-backup.hg(glob)$hgunbundle.hg/strip-backup/210589181b14-e09c7b88-backup.hg#restorestateaddingchangesetsaddingmanifestsaddingfilechangesadded2changesetswith1changesto2files(+1heads)(run'hg heads .'toseeheads,'hg merge'tomerge)Onlyallowdirectaccessandcheckthatevolveworkslikebefore(alsodisableevolvecommandstoavoidhintaboutusingevolve)$cat>>$HGRCPATH<<EOF>[extensions]>inhibit=!>[experimental]>evolution=createmarkers>EOF$hgup151filesupdated,0filesmerged,0filesremoved,0filesunresolvedworkingdirectoryparentisobsolete!$cat>>$HGRCPATH<<EOF>[experimental]>evolution=all>EOF$echo"CM">cM$hgamend$hglog-G@21:721c3c279519addcM||o16:a438c045eb37addcN|||x15:2d66e189f5b5addcM|/o14:d66ccb8c5871addcL|o7:18214586bf78addcJ|o6:cf5c4f4554ceaddcH|o5:5419eb264a33addcG|o4:98065434e5c6addcE|o0:54ccbc537fc2addcA$cat>>$HGRCPATH<<EOF>[extensions]>EOF$echo"inhibit=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/hack/inhibit.py">>$HGRCPATHEmptycommit$hgamendnothingchanged[1]Checkthatthebehaviorofrebasewithobsolescencemarkersismaintaineddespiteinhibit$hgupa438c045eb372filesupdated,0filesmerged,0filesremoved,0filesunresolved$hgrebase-r15::-d21--configexperimental.rebaseskipobsolete=Truenote:notrebasing15:2d66e189f5b5"add cM",alreadyindestinationas21:721c3c279519"add cM"rebasing16:a438c045eb37"add cN"$hgup-q2d66e189f5b5#Toinhibititastherestoftestdependsonit$hgup-q21DirectaccessshouldloadaftersomeextensionsprecisedintheconfWithnoextensionspecified:$cat>$TESTTMP/test_extension.py<<EOF>frommercurialimportextensions>defuisetup(ui):>printextensions._order>EOF$cat>>$HGRCPATH<<EOF>[extensions]>testextension=$TESTTMP/test_extension.py>EOF$hgid['rebase','strip','evolve','directaccess','inhibit','testextension']721c3c279519Withtest_extensionspecified:$cat>>$HGRCPATH<<EOF>[directaccess]>loadsafter=testextension>EOF$hgid['rebase','strip','evolve','inhibit','testextension','directaccess']721c3c279519Inhibitshouldnotworkwithoutdirectaccess$cat>>$HGRCPATH<<EOF>[extensions]>directaccess=!>testextension=!>EOF$hgup.cannotuseinhibitwithoutthedirectaccessextension(pleaseenableitorinhibitwon't work) 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo "directaccess=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/hack/directaccess.py" >> $HGRCPATH $ cd ..hg push should not allow directaccess unless forced with --hiddenWe copy the inhibhit repo to inhibit2 and make some changes to push to inhibit $ cp -r inhibit inhibit2 $ pwd=$(pwd) $ cd inhibit $ mkcommit pk created new head $ hg id 003a4735afde tip $ echo "OO" > pk $ hg amend $ hg id 71eb4f100663 tipHidden commits cannot be pushed without --hidden $ hg push -r 003a4735afde $pwd/inhibit2 pushing to $TESTTMP/inhibit2 abort: hidden revision '003a4735afde'! (use --hidden to access hidden revisions) [255]Visible commits can still be pushed $ hg push -fr 71eb4f100663 $pwd/inhibit2 pushing to $TESTTMP/inhibit2 searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markersCreate a stack (obsolete with successor in dest) -> (not obsolete) and rebaseit. We expect to not see the stack at the end of the rebase. $ hg log -G -r "25::" @ 25:71eb4f100663 add pk | ~ $ hg up -C 22 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit Dk $ hg prune 22 -s 25 1 changesets pruned $ hg rebase -s 22 -d 25 --config experimental.rebaseskipobsolete=True note: not rebasing 22:46cb6daad392 "add cN", already in destination as 25:71eb4f100663 "add pk" rebasing 26:7ad60e760c7b "add Dk" (tip) $ hg log -G -r "25::" @ 27:1192fa9fbc68 add Dk | o 25:71eb4f100663 add pk | ~Create a stack (obsolete with succ in dest) -> (not obsolete) -> (not obsolete).Rebase the first two revs of the stack onto dest, we expect to see one newrevision on the destination and everything visible. $ hg up 25 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit Dl created new head $ mkcommit Dp $ mkcommit Do $ hg log -G -r "25::" @ 30:b517facce1ef add Do | o 29:c5a47ab27c2e add Dp | o 28:8c1c2edbaf1b add Dl | | o 27:1192fa9fbc68 add Dk |/ o 25:71eb4f100663 add pk | ~ $ hg prune 28 -s 27 1 changesets pruned $ hg up 25 0 files updated, 0 files merged, 3 files removed, 0 files unresolved $ hg rebase -r "28 + 29" --keep -d 27 --config experimental.rebaseskipobsolete=True note: not rebasing 28:8c1c2edbaf1b "add Dl", already in destination as 27:1192fa9fbc68 "add Dk" rebasing 29:c5a47ab27c2e "add Dp" $ hg log -G -r "25::" o 31:7d8affb1f604 add Dp | | o 30:b517facce1ef add Do | | | o 29:c5a47ab27c2e add Dp | | | o 28:8c1c2edbaf1b add Dl | | o | 27:1192fa9fbc68 add Dk |/ @ 25:71eb4f100663 add pk | ~Rebase the same stack in full on the destination, we expect it to disappearand only see the top revision added to destination. We don\'t expect 29 to beskipped as we used --keep before. $ hg rebase -s 28 -d 27 --config experimental.rebaseskipobsolete=True note: not rebasing 28:8c1c2edbaf1b "add Dl", already in destination as 27:1192fa9fbc68 "add Dk" rebasing 29:c5a47ab27c2e "add Dp" rebasing 30:b517facce1ef "add Do" $ hg log -G -r "25::" o 32:1d43fff9e26f add Do | o 31:7d8affb1f604 add Dp | o 27:1192fa9fbc68 add Dk | @ 25:71eb4f100663 add pk | ~Pulling from a inhibit repo to a non-inhibit repo should work $ cd .. $ hg clone -q inhibit not-inhibit $ cat >> not-inhibit/.hg/hgrc <<EOF>[extensions]>inhibit=!>directaccess=!>evolve=!>EOF$cdnot-inhibit$hgbook-dfoo$hgpullpullingfrom$TESTTMP/inhibit(glob)searchingforchangesnochangesfoundaddingremotebookmarkfooTestthatbookmark-Dcantakemultiplebranchnames$cd../inhibit$hgbookmarkbook2book1book3$touchfoo&&hgaddfoo&&hgci-m"add foo"creatednewhead$hgupbook10filesupdated,0filesmerged,1filesremoved,0filesunresolved(activatingbookmarkbook1)$hgbookmark-Dbook2book3bookmark'book2'deletedbookmark'book3'deleted1changesetspruned