[Updated] D11749: test: add test for a former race resulting in bad dirstate

valentin.gatienbaron (Valentin Gatien-Baron) phabricator at mercurial-scm.org
Mon Dec 13 14:17:05 UTC 2021


Closed by commit rHGbc6547f61310: test: add test for a former race resulting in bad dirstate (authored by valentin.gatienbaron).
This revision was automatically updated to reflect the committed changes.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D11749?vs=31428&id=31454

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D11749/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D11749

AFFECTED FILES
  tests/test-dirstate-race2.t

CHANGE DETAILS

diff --git a/tests/test-dirstate-race2.t b/tests/test-dirstate-race2.t
--- a/tests/test-dirstate-race2.t
+++ b/tests/test-dirstate-race2.t
@@ -30,17 +30,23 @@
   n 644          3 (set  |unset)               a (re)
 
   $ cat >> $TESTTMP/dirstaterace.py << EOF
+  > import time
   > from mercurial import (
+  >     commit,
   >     extensions,
   >     merge,
   > )
   > def extsetup(ui):
-  >     extensions.wrapfunction(merge, 'applyupdates', wrap)
-  > def wrap(orig, *args, **kwargs):
-  >     res = orig(*args, **kwargs)
-  >     with open("a", "w"):
-  >         pass # just truncate the file
-  >     return res
+  >     extensions.wrapfunction(merge, 'applyupdates', wrap(0))
+  >     extensions.wrapfunction(commit, 'commitctx', wrap(1))
+  > def wrap(duration):
+  >     def new(orig, *args, **kwargs):
+  >         res = orig(*args, **kwargs)
+  >         with open("a", "w"):
+  >             pass # just truncate the file
+  >         time.sleep(duration)
+  >         return res
+  >     return new
   > EOF
 
 Do an update where file 'a' is changed between hg writing it to disk
@@ -52,3 +58,32 @@
   $ hg debugdirstate --no-dates
   n 644          2 (set  |unset)               a (re)
   $ echo a > a; hg status; hg diff
+
+Do a commit where file 'a' is changed between hg committing its new
+revision into the repository, and the writing of the dirstate.
+
+This used to results in a corrupted dirstate (size did not match committed size).
+
+  $ echo aaa > a; hg commit -qm _
+  $ hg merge -qr 1; hg resolve -m; rm a.orig
+  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+  (no more unresolved files)
+  $ cat a
+  <<<<<<< working copy: be46f74ce38d - test: _
+  aaa
+  =======
+  aa
+  >>>>>>> merge rev:    eb3fc6c17aa3 - test: _
+  $ hg debugdirstate --no-dates
+  m   0         -2 (set  |unset)               a (re)
+  $ hg commit -m _ --config extensions.race=$TESTTMP/dirstaterace.py
+  $ hg debugdirstate --no-dates
+  n   0         -1 unset               a
+  $ cat a | wc -c
+   *0 (re)
+  $ hg cat -r . a | wc -c
+   *105 (re)
+  $ hg status; hg diff --stat
+  M a
+   a |  5 -----
+   1 files changed, 0 insertions(+), 5 deletions(-)



To: valentin.gatienbaron, #hg-reviewers, Alphare
Cc: Alphare, marmoute, mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20211213/45e65292/attachment-0002.html>


More information about the Mercurial-patches mailing list