dirstate: add test for exceptions during updates
authorDurham Goode <durham@fb.com>
Fri, 05 Sep 2014 15:36:56 -0700
changeset 22406 2e47e461d2ca
parent 22405 6f63c47cbb86
child 22407 d259322a394b
dirstate: add test for exceptions during updates Adds a test that checks if the working copy parent and the working copy are in a good state if an exception happens between the time the working copy parent is set and the time the actual updates are recorded in the dirstate.
tests/test-dirstate.t
--- a/tests/test-dirstate.t	Fri Sep 05 11:36:20 2014 -0700
+++ b/tests/test-dirstate.t	Fri Sep 05 15:36:56 2014 -0700
@@ -61,3 +61,28 @@
   $ hg debugstate
   n 644          2 2018-01-19 15:14:08 a
 #endif
+
+Verify that exceptions during a dirstate change leave the dirstate
+coherent (issue4353)
+
+  $ cat > ../dirstateexception.py <<EOF
+  > from mercurial import merge, extensions, util
+  > 
+  > def wraprecordupdates(orig, repo, actions, branchmerge):
+  >     raise util.Abort("simulated error while recording dirstateupdates")
+  > 
+  > def reposetup(ui, repo):
+  >     extensions.wrapfunction(merge, 'recordupdates', wraprecordupdates)
+  > EOF
+
+  $ hg rm a
+  $ hg commit -m 'rm a'
+  $ echo "[extensions]" >> .hg/hgrc
+  $ echo "dirstateex=../dirstateexception.py" >> .hg/hgrc
+  $ hg up 0
+  abort: simulated error while recording dirstateupdates
+  [255]
+  $ hg log -r . -T '{rev}\n'
+  1
+  $ hg status
+  ? a