##// END OF EJS Templates
revlog: subclass the new `repository.iverifyproblem` Protocol class...
revlog: subclass the new `repository.iverifyproblem` Protocol class This is the same transformation as 3a90a6fd710d did for dirstate, but the CamelCase naming was already cleaned up here. We shouldn't have to explicitly subclass, but I'm doing so to test the interplay of regular attributes and the `attrs` class. Also, PyCharm has a nifty feature that puts a jump point in the gutter to navigate back and forth between the base class and subclasses (and override functions and base class functions) when there's an explicit subclassing. Additionally, PyCharm will immediately flag signature mismatches without a 40m pytype run.

File last commit:

r49530:e845537f merge default
r53365:4ef6dbc2 default
Show More
test-dirstate-race2.t
89 lines | 2.7 KiB | text/troff | Tads3Lexer
/ tests / test-dirstate-race2.t
Simon Sapin
dirstate: Remove the flat Rust DirstateMap implementation...
r48882 #testcases dirstate-v1 dirstate-v2
Simon Sapin
dirstate-tree: Add a dirstate-v1-tree variant of some tests...
r47900
Simon Sapin
dirstate-v2: Add a variant of some tests, that uses the new format...
r48056 #if dirstate-v2
dirstate-v2: add an option to prevent unintentional slow dirstate-v2...
r49049 $ cat >> $HGRCPATH << EOF
> [format]
dirstate-v2: rename the configuration to enable the format...
r49523 > use-dirstate-v2=1
dirstate-v2: add an option to prevent unintentional slow dirstate-v2...
r49049 > [storage]
> dirstate-v2.slow-path=allow
> EOF
Simon Sapin
dirstate-v2: Add a variant of some tests, that uses the new format...
r48056 #endif
Valentin Gatien-Baron
tests: show how the dirstate can end up containing wrong information...
r42654 Checking the size/permissions/file-type of files stored in the
dirstate after an update where the files are changed concurrently
outside of hg's control.
$ hg init repo
$ cd repo
$ echo a > a
$ hg commit -qAm _
$ echo aa > a
$ hg commit -m _
tests: make sure no ambiguities remains after the commit...
r49197 # this sleep is there to ensure current time has -at-least- one second away
# from the current time. It ensure the mtime is not ambiguous. If the test
# "sleep" longer this will be fine.
# It is not used to synchronise parallele operation so it is "fine" to use it.
$ sleep 1
$ hg status
Valentin Gatien-Baron
tests: show how the dirstate can end up containing wrong information...
r42654
$ hg debugdirstate --no-dates
n 644 3 (set |unset) a (re)
$ cat >> $TESTTMP/dirstaterace.py << EOF
Valentin Gatien-Baron
test: add test for a former race resulting in bad dirstate...
r49290 > import time
Valentin Gatien-Baron
tests: show how the dirstate can end up containing wrong information...
r42654 > from mercurial import (
Valentin Gatien-Baron
test: add test for a former race resulting in bad dirstate...
r49290 > commit,
Valentin Gatien-Baron
tests: show how the dirstate can end up containing wrong information...
r42654 > extensions,
> merge,
> )
> def extsetup(ui):
Valentin Gatien-Baron
test: add test for a former race resulting in bad dirstate...
r49290 > 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
Valentin Gatien-Baron
tests: show how the dirstate can end up containing wrong information...
r42654 > EOF
Do an update where file 'a' is changed between hg writing it to disk
Valentin Gatien-Baron
merge: fix race that could cause wrong size in dirstate...
r42656 and hg writing the dirstate. The dirstate is correct nonetheless, and
so hg status correctly shows a as clean.
Valentin Gatien-Baron
tests: show how the dirstate can end up containing wrong information...
r42654
$ hg up -r 0 --config extensions.race=$TESTTMP/dirstaterace.py
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg debugdirstate --no-dates
Valentin Gatien-Baron
merge: fix race that could cause wrong size in dirstate...
r42656 n 644 2 (set |unset) a (re)
Valentin Gatien-Baron
tests: show how the dirstate can end up containing wrong information...
r42654 $ echo a > a; hg status; hg diff
Valentin Gatien-Baron
test: add test for a former race resulting in bad dirstate...
r49290
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(-)