Mercurial > hg
annotate tests/test-dirstate-race.t @ 48050:2ac0e6b23222
dirstate: Replace dropfile with drop_item_and_copy_source
Those removing a DirstateItem and a copy source are always done together
Differential Revision: https://phab.mercurial-scm.org/D11493
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Thu, 23 Sep 2021 15:36:43 +0200 |
parents | 6763913fa175 |
children | bf8837e3d7ce |
rev | line source |
---|---|
47281
6763913fa175
dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents:
47129
diff
changeset
|
1 #testcases dirstate-v1 dirstate-v1-tree dirstate-v2 |
47129
93eb6c8035a9
dirstate-tree: Add a dirstate-v1-tree variant of some tests
Simon Sapin <simon.sapin@octobus.net>
parents:
45771
diff
changeset
|
2 |
93eb6c8035a9
dirstate-tree: Add a dirstate-v1-tree variant of some tests
Simon Sapin <simon.sapin@octobus.net>
parents:
45771
diff
changeset
|
3 #if dirstate-v1-tree |
93eb6c8035a9
dirstate-tree: Add a dirstate-v1-tree variant of some tests
Simon Sapin <simon.sapin@octobus.net>
parents:
45771
diff
changeset
|
4 #require rust |
93eb6c8035a9
dirstate-tree: Add a dirstate-v1-tree variant of some tests
Simon Sapin <simon.sapin@octobus.net>
parents:
45771
diff
changeset
|
5 $ echo '[experimental]' >> $HGRCPATH |
93eb6c8035a9
dirstate-tree: Add a dirstate-v1-tree variant of some tests
Simon Sapin <simon.sapin@octobus.net>
parents:
45771
diff
changeset
|
6 $ echo 'dirstate-tree.in-memory=1' >> $HGRCPATH |
93eb6c8035a9
dirstate-tree: Add a dirstate-v1-tree variant of some tests
Simon Sapin <simon.sapin@octobus.net>
parents:
45771
diff
changeset
|
7 #endif |
93eb6c8035a9
dirstate-tree: Add a dirstate-v1-tree variant of some tests
Simon Sapin <simon.sapin@octobus.net>
parents:
45771
diff
changeset
|
8 |
47281
6763913fa175
dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents:
47129
diff
changeset
|
9 #if dirstate-v2 |
6763913fa175
dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents:
47129
diff
changeset
|
10 #require rust |
6763913fa175
dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents:
47129
diff
changeset
|
11 $ echo '[format]' >> $HGRCPATH |
6763913fa175
dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents:
47129
diff
changeset
|
12 $ echo 'exp-dirstate-v2=1' >> $HGRCPATH |
6763913fa175
dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents:
47129
diff
changeset
|
13 #endif |
6763913fa175
dirstate-v2: Add a variant of some tests, that uses the new format
Simon Sapin <simon.sapin@octobus.net>
parents:
47129
diff
changeset
|
14 |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
15 $ hg init repo |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
16 $ cd repo |
12279 | 17 $ echo a > a |
18 $ hg add a | |
19 $ hg commit -m test | |
20 | |
21 Do we ever miss a sub-second change?: | |
6327
6d952dc2abc9
dirstate: refactor granularity code, add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
22 |
12279 | 23 $ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do |
24 > hg co -qC 0 | |
25 > echo b > a | |
26 > hg st | |
27 > done | |
28 M a | |
29 M a | |
30 M a | |
31 M a | |
32 M a | |
33 M a | |
34 M a | |
35 M a | |
36 M a | |
37 M a | |
38 M a | |
39 M a | |
40 M a | |
41 M a | |
42 M a | |
43 M a | |
44 M a | |
45 M a | |
46 M a | |
47 M a | |
6327
6d952dc2abc9
dirstate: refactor granularity code, add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
48 |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
49 $ echo test > b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
50 $ mkdir dir1 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
51 $ echo test > dir1/c |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
52 $ echo test > d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
53 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
54 $ echo test > e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
55 #if execbit |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
56 A directory will typically have the execute bit -- make sure it doesn't get |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
57 confused with a file with the exec bit set |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
58 $ chmod +x e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
59 #endif |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
60 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
61 $ hg add b dir1 d e |
35393
4441705b7111
tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents:
33577
diff
changeset
|
62 adding dir1/c |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
63 $ hg commit -m test2 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
64 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
65 $ cat >> $TESTTMP/dirstaterace.py << EOF |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
66 > from mercurial import ( |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
67 > context, |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
68 > extensions, |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
69 > ) |
41068
28a4fb793ba1
extensions: deprecate extsetup without a `ui` argument (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
40296
diff
changeset
|
70 > def extsetup(ui): |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
71 > extensions.wrapfunction(context.workingctx, '_checklookup', overridechecklookup) |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
72 > def overridechecklookup(orig, self, files): |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
73 > # make an update that changes the dirstate from underneath |
40296
e787d97e90ad
py3: fix test-dirstate-race.t
Mark Thomas <mbthomas@fb.com>
parents:
35393
diff
changeset
|
74 > self._repo.ui.system(br"sh '$TESTTMP/dirstaterace.sh'", |
32751
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
75 > cwd=self._repo.root) |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
76 > return orig(self, files) |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
77 > EOF |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
78 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
79 $ hg debugrebuilddirstate |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
80 $ hg debugdirstate |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
81 n 0 -1 unset a |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
82 n 0 -1 unset b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
83 n 0 -1 unset d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
84 n 0 -1 unset dir1/c |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
85 n 0 -1 unset e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
86 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
87 XXX Note that this returns M for files that got replaced by directories. This is |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
88 definitely a bug, but the fix for that is hard and the next status run is fine |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
89 anyway. |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
90 |
32751
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
91 $ cat > $TESTTMP/dirstaterace.sh <<EOF |
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
92 > rm b && rm -r dir1 && rm d && mkdir d && rm e && mkdir e |
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
93 > EOF |
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
94 |
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
95 $ hg status --config extensions.dirstaterace=$TESTTMP/dirstaterace.py |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
96 M d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
97 M e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
98 ! b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
99 ! dir1/c |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
100 $ hg debugdirstate |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
101 n 644 2 * a (glob) |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
102 n 0 -1 unset b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
103 n 0 -1 unset d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
104 n 0 -1 unset dir1/c |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
105 n 0 -1 unset e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
106 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
107 $ hg status |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
108 ! b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
109 ! d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
110 ! dir1/c |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
111 ! e |
32752
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
112 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
113 $ rmdir d e |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
114 $ hg update -C -q . |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
115 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
116 Test that dirstate changes aren't written out at the end of "hg |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
117 status", if .hg/dirstate is already changed simultaneously before |
32812
add613cddcb6
workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents:
32802
diff
changeset
|
118 acquisition of wlock in workingctx._poststatusfixup(). |
32752
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
119 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
120 This avoidance is important to keep consistency of dirstate in race |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
121 condition (see issue5584 for detail). |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
122 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
123 $ hg parents -q |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
124 1:* (glob) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
125 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
126 $ hg debugrebuilddirstate |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
127 $ hg debugdirstate |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
128 n 0 -1 unset a |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
129 n 0 -1 unset b |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
130 n 0 -1 unset d |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
131 n 0 -1 unset dir1/c |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
132 n 0 -1 unset e |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
133 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
134 $ cat > $TESTTMP/dirstaterace.sh <<EOF |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
135 > # This script assumes timetable of typical issue5584 case below: |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
136 > # |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
137 > # 1. "hg status" loads .hg/dirstate |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
138 > # 2. "hg status" confirms clean-ness of FILE |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
139 > # 3. "hg update -C 0" updates the working directory simultaneously |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
140 > # (FILE is removed, and FILE is dropped from .hg/dirstate) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
141 > # 4. "hg status" acquires wlock |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
142 > # (.hg/dirstate is re-loaded = no FILE entry in dirstate) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
143 > # 5. "hg status" marks FILE in dirstate as clean |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
144 > # (FILE entry is added to in-memory dirstate) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
145 > # 6. "hg status" writes dirstate changes into .hg/dirstate |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
146 > # (FILE entry is written into .hg/dirstate) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
147 > # |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
148 > # To reproduce similar situation easily and certainly, #2 and #3 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
149 > # are swapped. "hg cat" below ensures #2 on "hg status" side. |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
150 > |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
151 > hg update -q -C 0 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
152 > hg cat -r 1 b > b |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
153 > EOF |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
154 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
155 "hg status" below should excludes "e", of which exec flag is set, for |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
156 portability of test scenario, because unsure but missing "e" is |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
157 treated differently in _checklookup() according to runtime platform. |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
158 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
159 - "missing(!)" on POSIX, "pctx[f].cmp(self[f])" raises ENOENT |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
160 - "modified(M)" on Windows, "self.flags(f) != pctx.flags(f)" is True |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
161 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
162 $ hg status --config extensions.dirstaterace=$TESTTMP/dirstaterace.py --debug -X path:e |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
163 skip updating dirstate: identity mismatch |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
164 M a |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
165 ! d |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
166 ! dir1/c |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
167 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
168 $ hg parents -q |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
169 0:* (glob) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
170 $ hg files |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
171 a |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
172 $ hg debugdirstate |
32802
f40eec7af044
test-dirstate-race: back out changeset c82fa7efcbc8
Siddharth Agarwal <sid0@fb.com>
parents:
32771
diff
changeset
|
173 n * * * a (glob) |
32815
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
174 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
175 $ rm b |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
176 |
32816
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
177 #if fsmonitor |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
178 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
179 Create fsmonitor state. |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
180 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
181 $ hg status |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
182 $ f --type .hg/fsmonitor.state |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
183 .hg/fsmonitor.state: file |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
184 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
185 Test that invalidating fsmonitor state in the middle (which doesn't require the |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
186 wlock) causes the fsmonitor update to be skipped. |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
187 hg debugrebuilddirstate ensures that the dirstaterace hook will be called, but |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
188 it also invalidates the fsmonitor state. So back it up and restore it. |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
189 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
190 $ mv .hg/fsmonitor.state .hg/fsmonitor.state.tmp |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
191 $ hg debugrebuilddirstate |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
192 $ mv .hg/fsmonitor.state.tmp .hg/fsmonitor.state |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
193 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
194 $ cat > $TESTTMP/dirstaterace.sh <<EOF |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
195 > rm .hg/fsmonitor.state |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
196 > EOF |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
197 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
198 $ hg status --config extensions.dirstaterace=$TESTTMP/dirstaterace.py --debug |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
199 skip updating fsmonitor.state: identity mismatch |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
200 $ f .hg/fsmonitor.state |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
201 .hg/fsmonitor.state: file not found |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
202 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
203 #endif |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
204 |
32815
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
205 Set up a rebase situation for issue5581. |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
206 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
207 $ echo c2 > a |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
208 $ echo c2 > b |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
209 $ hg add b |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
210 $ hg commit -m c2 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
211 created new head |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
212 $ echo c3 >> a |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
213 $ hg commit -m c3 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
214 $ hg update 2 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
215 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
216 $ echo c4 >> a |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
217 $ echo c4 >> b |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
218 $ hg commit -m c4 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
219 created new head |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
220 |
33577
34a8ef358c93
test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents:
33139
diff
changeset
|
221 Configure a merge tool that runs status in the middle of the rebase. The goal of |
34a8ef358c93
test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents:
33139
diff
changeset
|
222 the status call is to trigger a potential bug if fsmonitor's state is written |
34a8ef358c93
test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents:
33139
diff
changeset
|
223 even though the wlock is held by another process. The output of 'hg status' in |
34a8ef358c93
test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents:
33139
diff
changeset
|
224 the merge tool goes to /dev/null because we're more interested in the results of |
34a8ef358c93
test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents:
33139
diff
changeset
|
225 'hg status' run after the rebase. |
32815
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
226 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
227 $ cat >> $TESTTMP/mergetool-race.sh << EOF |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
228 > echo "custom merge tool" |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
229 > printf "c2\nc3\nc4\n" > \$1 |
33577
34a8ef358c93
test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents:
33139
diff
changeset
|
230 > hg --cwd "$TESTTMP/repo" status > /dev/null |
32815
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
231 > echo "custom merge tool end" |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
232 > EOF |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
233 $ cat >> $HGRCPATH << EOF |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
234 > [extensions] |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
235 > rebase = |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
236 > [merge-tools] |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
237 > test.executable=sh |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
238 > test.args=$TESTTMP/mergetool-race.sh \$output |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
239 > EOF |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
240 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
241 $ hg rebase -s . -d 3 --tool test |
45771
f90a5c211251
rebase: change and standarize template for rebase's one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents:
41068
diff
changeset
|
242 rebasing 4:b08445fd6b2a tip "c4" |
32815
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
243 merging a |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
244 custom merge tool |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
245 custom merge tool end |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
246 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/* (glob) |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
247 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
248 This hg status should be empty, whether or not fsmonitor is enabled (issue5581). |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
249 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
250 $ hg status |