Mercurial > evolve
view tests/test-inhibit.t @ 1346:9a1415f8b21b
inhbit: don't crash on commit with no changes
Before this patch inhibit would crash when running hg amend with no changes.
This patch fixes this case and adds a test to prevent regression.
author | Laurent Charignon <lcharignon@fb.com> |
---|---|
date | Wed, 20 May 2015 10:58:32 -0700 |
parents | 41628bd60ee6 |
children | a143037892d6 |
line wrap: on
line source
$ cat >> $HGRCPATH <<EOF > [ui] > logtemplate = {rev}:{node|short} {desc}\n > [experimental] > prunestrip=True > evolution=createmarkers > [extensions] > rebase= > strip= > EOF $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH $ echo "directaccess=$(echo $(dirname $TESTDIR))/hgext/directaccess.py" >> $HGRCPATH $ echo "inhibit=$(echo $(dirname $TESTDIR))/hgext/inhibit.py" >> $HGRCPATH $ mkcommit() { > echo "$1" > "$1" > hg add "$1" > hg ci -m "add $1" > } $ hg init inhibit $ cd inhibit $ mkcommit cA $ mkcommit cB $ mkcommit cC $ mkcommit cD $ hg up 'desc(cA)' 0 files updated, 0 files merged, 3 files removed, 0 files unresolved $ mkcommit cE created new head $ mkcommit cG $ mkcommit cH $ mkcommit cJ $ hg log -G @ 7:18214586bf78 add cJ | o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | | o 3:2db36d8066ff add cD | | | o 2:7df62a38b9bf add cC | | | o 1:02bcbc3f6e56 add cB |/ o 0:54ccbc537fc2 add cA plain prune $ hg strip 1:: 3 changesets pruned $ hg log -G @ 7:18214586bf78 add cJ | o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ hg debugobsinhibit --hidden 1:: $ hg log -G @ 7:18214586bf78 add cJ | o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | | o 3:2db36d8066ff add cD | | | o 2:7df62a38b9bf add cC | | | o 1:02bcbc3f6e56 add cB |/ o 0:54ccbc537fc2 add cA $ hg strip --hidden 1:: 3 changesets pruned $ hg log -G @ 7:18214586bf78 add cJ | o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA after amend $ echo babar > cJ $ hg commit --amend $ hg log -G @ 9:55c73a90e4b4 add cJ | o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ hg debugobsinhibit --hidden 18214586bf78 $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA and no divergence $ hg summary parent: 9:55c73a90e4b4 tip add cJ branch: default commit: (clean) update: 1 new changesets, 2 branch heads (merge) check public revision got cleared (when adding the second inhibitor, the first one is removed because it is public) $ wc -m .hg/store/obsinhibit | sed -e 's/^[ \t]*//' 20 .hg/store/obsinhibit $ hg strip 7 1 changesets pruned $ hg debugobsinhibit --hidden 18214586bf78 $ wc -m .hg/store/obsinhibit | sed -e 's/^[ \t]*//' 20 .hg/store/obsinhibit $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ hg phase --public 7 $ hg strip 9 0 files updated, 0 files merged, 1 files removed, 0 files unresolved working directory now at cf5c4f4554ce 1 changesets pruned $ hg log -G o 7:18214586bf78 add cJ | @ 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ hg debugobsinhibit --hidden 55c73a90e4b4 $ wc -m .hg/store/obsinhibit | sed -e 's/^[ \t]*//' 20 .hg/store/obsinhibit $ hg log -G o 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ @ 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA Update should inhibit all related unstable commits $ hg update 2 --hidden 2 files updated, 0 files merged, 3 files removed, 0 files unresolved $ hg log -G o 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | | @ 2:7df62a38b9bf add cC | | | o 1:02bcbc3f6e56 add cB |/ o 0:54ccbc537fc2 add cA $ hg update 9 4 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | | o 2:7df62a38b9bf add cC | | | o 1:02bcbc3f6e56 add cB |/ o 0:54ccbc537fc2 add cA $ hg strip --hidden 1:: 3 changesets pruned $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA Bookmark should inhibit all related unstable commits $ hg bookmark -r 2 book1 --hidden $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | | o 2:7df62a38b9bf add cC | | | o 1:02bcbc3f6e56 add cB |/ o 0:54ccbc537fc2 add cA Removing a bookmark with bookmark -D should prune the changes underneath that are not reachable from another bookmark or head $ hg bookmark -r 1 book2 $ hg bookmark -D book1 --config experimental.evolution=createmarkers #--config to make sure prune is not registered as a command. bookmark 'book1' deleted 1 changesets pruned $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | | o 1:02bcbc3f6e56 add cB |/ o 0:54ccbc537fc2 add cA $ hg bookmark -D book2 bookmark 'book2' deleted 1 changesets pruned $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA Test that direct access make changesets visible $ hg export 2db36d8066ff 02bcbc3f6e56 # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 2db36d8066ff50e8be3d3e6c2da1ebc0a8381d82 # Parent 7df62a38b9bf9daf968de235043ba88a8ef43393 add cD diff -r 7df62a38b9bf -r 2db36d8066ff cD --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cD Thu Jan 01 00:00:00 1970 +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 54ccbc537fc2d6845a5d61337c1cfb80d1d2815e add cB diff -r 54ccbc537fc2 -r 02bcbc3f6e56 cB --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cB Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ +cB But only with hash $ hg export 2db36d8066ff:: # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Node ID 2db36d8066ff50e8be3d3e6c2da1ebc0a8381d82 # Parent 7df62a38b9bf9daf968de235043ba88a8ef43393 add cD diff -r 7df62a38b9bf -r 2db36d8066ff cD --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cD Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ +cD $ hg export 1 3 abort: hidden revision '1'! (use --hidden to access hidden revisions) [255] With severals hidden sha, rebase of one hidden stack onto another one: $ hg update -C 0 0 files updated, 0 files merged, 4 files removed, 0 files unresolved $ mkcommit cK created new head $ mkcommit cL $ hg update -C 9 4 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg log -G o 11:53a94305e133 add cL | o 10:ad78ff7d621f add cK | | @ 9:55c73a90e4b4 add cJ | | | | o 7:18214586bf78 add cJ | |/ | o 6:cf5c4f4554ce add cH | | | o 5:5419eb264a33 add cG | | | o 4:98065434e5c6 add cE |/ o 0:54ccbc537fc2 add cA $ hg strip --hidden 10: 2 changesets pruned $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ hg rebase -s 10 -d 3 abort: hidden revision '3'! (use --hidden to access hidden revisions) [255] $ hg rebase -r ad78ff7d621f -r 53a94305e133 -d 2db36d8066ff Warning: accessing hidden changesets 2db36d8066ff for write operation Warning: accessing hidden changesets ad78ff7d621f for write operation Warning: accessing hidden changesets 53a94305e133 for write operation rebasing 10:ad78ff7d621f "add cK" rebasing 11:53a94305e133 "add cL" $ hg log -G o 13:2f7b7704d714 add cL | o 12:fe1634cbe235 add cK | | @ 9:55c73a90e4b4 add cJ | | | | o 7:18214586bf78 add cJ | |/ | o 6:cf5c4f4554ce add cH | | | o 5:5419eb264a33 add cG | | | o 4:98065434e5c6 add cE | | o | 3:2db36d8066ff add cD | | o | 2:7df62a38b9bf add cC | | o | 1:02bcbc3f6e56 add cB |/ o 0:54ccbc537fc2 add cA Check that amending in the middle of a stack does not show obsolete revs Since we are doing operation in the middle of the stack we cannot just have createmarkers as we are creating instability $ cat >> $HGRCPATH <<EOF > [experimental] > evolution=all > EOF $ hg strip --hidden 1:: 5 changesets pruned $ hg log -G @ 9:55c73a90e4b4 add cJ | | o 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ hg up 7 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ mkcommit cL $ mkcommit cM $ mkcommit cN $ hg log -G @ 16:a438c045eb37 add cN | o 15:2d66e189f5b5 add cM | o 14:d66ccb8c5871 add cL | | o 9:55c73a90e4b4 add cJ | | o | 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ hg up 15 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo "mmm" >> cM $ hg amend $ hg log -G @ 18:210589181b14 add cM | | o 16:a438c045eb37 add cN | | | o 15:2d66e189f5b5 add cM |/ o 14:d66ccb8c5871 add cL | | o 9:55c73a90e4b4 add cJ | | o | 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA Check that rebasing a commit twice makes the commit visible again $ hg rebase -d 18 -r 16 --keep rebasing 16:a438c045eb37 "add cN" $ hg log -r 14:: -G o 19:104eed5354c7 add cN | @ 18:210589181b14 add cM | | o 16:a438c045eb37 add cN | | | o 15:2d66e189f5b5 add cM |/ o 14:d66ccb8c5871 add cL | $ hg strip -r 104eed5354c7 1 changesets pruned $ hg rebase -d 18 -r 16 --keep rebasing 16:a438c045eb37 "add cN" $ hg log -r 14:: -G o 19:104eed5354c7 add cN | @ 18:210589181b14 add cM | | o 16:a438c045eb37 add cN | | | o 15:2d66e189f5b5 add cM |/ o 14:d66ccb8c5871 add cL | Test prunestrip $ hg book foo -r 104eed5354c7 $ hg strip -r 210589181b14 0 files updated, 0 files merged, 1 files removed, 0 files unresolved working directory now at d66ccb8c5871 2 changesets pruned $ hg log -r 14:: -G -T '{rev}:{node|short} {desc|firstline} {bookmarks}\n' o 16:a438c045eb37 add cN | o 15:2d66e189f5b5 add cM | @ 14:d66ccb8c5871 add cL foo | Check that --hidden used with inhibit does not hide every obsolete commit We show the log before and after a log -G --hidden, they should be the same $ hg log -G o 16:a438c045eb37 add cN | o 15:2d66e189f5b5 add cM | @ 14:d66ccb8c5871 add cL | | o 9:55c73a90e4b4 add cJ | | o | 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ hg log -G --hidden x 19:104eed5354c7 add cN | x 18:210589181b14 add cM | | x 17:b3c3274523f9 temporary amend commit for 2d66e189f5b5 | | | | o 16:a438c045eb37 add cN | |/ | o 15:2d66e189f5b5 add cM |/ @ 14:d66ccb8c5871 add cL | | x 13:2f7b7704d714 add cL | | | x 12:fe1634cbe235 add cK | | | | x 11:53a94305e133 add cL | | | | | x 10:ad78ff7d621f add cK | | | | | | o 9:55c73a90e4b4 add cJ | | | | +-------x 8:e84f73d9ad36 temporary amend commit for 18214586bf78 | | | | o-----+ 7:18214586bf78 add cJ / / / | | o 6:cf5c4f4554ce add cH | | | | | o 5:5419eb264a33 add cG | | | | | o 4:98065434e5c6 add cE | |/ x | 3:2db36d8066ff add cD | | x | 2:7df62a38b9bf add cC | | x | 1:02bcbc3f6e56 add cB |/ o 0:54ccbc537fc2 add cA $ hg log -G o 16:a438c045eb37 add cN | o 15:2d66e189f5b5 add cM | @ 14:d66ccb8c5871 add cL | | o 9:55c73a90e4b4 add cJ | | o | 7:18214586bf78 add cJ |/ o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA check that pruning and inhibited node does not confuse anything $ hg up --hidden 210589181b14 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg strip --bundle 210589181b14 0 files updated, 0 files merged, 1 files removed, 0 files unresolved saved backup bundle to $TESTTMP/inhibit/.hg/strip-backup/210589181b14-e09c7b88-backup.hg (glob) $ hg unbundle .hg/strip-backup/210589181b14-e09c7b88-backup.hg # restore state adding changesets adding manifests adding file changes added 2 changesets with 1 changes to 2 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) Only allow direct access and check that evolve works like before $ cat >> $HGRCPATH <<EOF > [extensions] > inhibit=! > EOF $ hg up 15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory parent is obsolete! $ echo "CM" > cM $ hg amend $ hg log -G @ 21:721c3c279519 add cM | | o 16:a438c045eb37 add cN | | | x 15:2d66e189f5b5 add cM |/ o 14:d66ccb8c5871 add cL | o 7:18214586bf78 add cJ | o 6:cf5c4f4554ce add cH | o 5:5419eb264a33 add cG | o 4:98065434e5c6 add cE | o 0:54ccbc537fc2 add cA $ cat >> $HGRCPATH <<EOF > [extensions] > EOF $ echo "inhibit=$(echo $(dirname $TESTDIR))/hgext/inhibit.py" >> $HGRCPATH Empty commit $ hg amend nothing changed [1] Inhibit should not work without directaccess $ cat >> $HGRCPATH <<EOF > [extensions] > directaccess=! > EOF $ hg up 15 abort: Cannot use inhibit without the direct access extension [255]