##// END OF EJS Templates
branching: merge default into stable for 6.1 freeze
branching: merge default into stable for 6.1 freeze

File last commit:

r49530:e845537f merge default
r49650:c00d3ce4 merge 6.1rc0 stable
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(-)