##// END OF EJS Templates
dirstate: clarify a `hg update` invocation in a test...
dirstate: clarify a `hg update` invocation in a test It is common for readers of that test to confuse the `hg co` call with a `hg commit`, while it actually means `hg checkout`, an alias for the more common `hg update. So let us use the clearer version. Differential Revision: https://phab.mercurial-scm.org/D11777

File last commit:

r49116:bf11ff22 default
r49196:f3f41e23 default
Show More
test-dirstate-race2.t
48 lines | 1.3 KiB | text/troff | Tads3Lexer
/ tests / test-dirstate-race2.t
#testcases dirstate-v1 dirstate-v2
#if dirstate-v2
$ cat >> $HGRCPATH << EOF
> [format]
> exp-rc-dirstate-v2=1
> [storage]
> dirstate-v2.slow-path=allow
> EOF
#endif
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
and hg writing the dirstate. The dirstate is correct nonetheless, and
so hg status correctly shows a as clean.
$ 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
n 644 2 (set |unset) a (re)
$ echo a > a; hg status; hg diff