Commit 635796fe authored by Valentin Gatien-Baron's avatar Valentin Gatien-Baron
Browse files

test: add test of a race resulting in bad dirstate

Specifically, the size stored in the dirstate is wrong.

Differential Revision: https://phab.mercurial-scm.org/D11749
parent ca42667c8d26
Pipeline #29887 failed with stages
in 48 minutes and 46 seconds
......@@ -33,4 +33,5 @@
n 644 3 (set |unset) a (re)
$ cat >> $TESTTMP/dirstaterace.py << EOF
> import time
> from mercurial import (
......@@ -36,5 +37,6 @@
> from mercurial import (
> commit,
> extensions,
> merge,
> )
> def extsetup(ui):
......@@ -37,13 +39,17 @@
> 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
......@@ -55,3 +61,31 @@
$ 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
results in a corrupted dirstate (size doesn't 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(-)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment