##// END OF EJS Templates
tests: show how the dirstate can end up containing wrong information...
Valentin Gatien-Baron -
r42647:d9a50456 default draft
parent child Browse files
Show More
@@ -0,0 +1,39
1 Checking the size/permissions/file-type of files stored in the
2 dirstate after an update where the files are changed concurrently
3 outside of hg's control.
4
5 $ hg init repo
6 $ cd repo
7 $ echo a > a
8 $ hg commit -qAm _
9 $ echo aa > a
10 $ hg commit -m _
11
12 $ hg debugdirstate --no-dates
13 n 644 3 (set |unset) a (re)
14
15 $ cat >> $TESTTMP/dirstaterace.py << EOF
16 > from mercurial import (
17 > extensions,
18 > merge,
19 > )
20 > def extsetup(ui):
21 > extensions.wrapfunction(merge, 'applyupdates', wrap)
22 > def wrap(orig, *args, **kwargs):
23 > res = orig(*args, **kwargs)
24 > with open("a", "w"):
25 > pass # just truncate the file
26 > return res
27 > EOF
28
29 Do an update where file 'a' is changed between hg writing it to disk
30 and hg writing the dirstate. It results in a corrupted dirstate, which
31 stores the wrong size, and thus hg status shows spuriously modified
32 files.
33
34 $ hg up -r 0 --config extensions.race=$TESTTMP/dirstaterace.py
35 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
36 $ hg debugdirstate --no-dates
37 n 644 0 (set |unset) a (re)
38 $ echo a > a; hg status; hg diff
39 M a
General Comments 0
You need to be logged in to leave comments. Login now