[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