test-dirstate-race2.t
48 lines
| 1.3 KiB
| text/troff
|
Tads3Lexer
/ tests / test-dirstate-race2.t
|
r48882 | #testcases dirstate-v1 dirstate-v2 | ||
|
r47900 | |||
|
r48056 | #if dirstate-v2 | ||
r49049 | $ cat >> $HGRCPATH << EOF | |||
> [format] | ||||
r49116 | > exp-rc-dirstate-v2=1 | |||
r49049 | > [storage] | |||
> dirstate-v2.slow-path=allow | ||||
> EOF | ||||
|
r48056 | #endif | ||
|
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 _ | ||||
$ hg debugdirstate --no-dates | ||||
n 644 3 (set |unset) a (re) | ||||
$ cat >> $TESTTMP/dirstaterace.py << EOF | ||||
> from mercurial import ( | ||||
> 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 | ||||
> EOF | ||||
Do an update where file 'a' is changed between hg writing it to disk | ||||
|
r42656 | and hg writing the dirstate. The dirstate is correct nonetheless, and | ||
so hg status correctly shows a as clean. | ||||
|
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 | ||||
|
r42656 | n 644 2 (set |unset) a (re) | ||
|
r42654 | $ echo a > a; hg status; hg diff | ||