Mercurial > hg
annotate tests/test-dirstate-race.t @ 44909:d452acc8cce8 stable
flags: account for flag change when tracking rename relevant to merge
There are some logic filtering rename to the one relevant to the merge. That
logic was oblivious of flag change, leading to exec flag being dropped when
merged with a renamed.
There are two others bugs affecting this scenario. This patch fix the was where
there is not modification involved except for the flag change. Fixes for the
other bug are coming in later changesets.
Differential Revision: https://phab.mercurial-scm.org/D8531
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 16 May 2020 20:37:56 +0200 |
parents | 28a4fb793ba1 |
children | f90a5c211251 |
rev | line source |
---|---|
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
1 $ hg init repo |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
2 $ cd repo |
12279 | 3 $ echo a > a |
4 $ hg add a | |
5 $ hg commit -m test | |
6 | |
7 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
|
8 |
12279 | 9 $ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do |
10 > hg co -qC 0 | |
11 > echo b > a | |
12 > hg st | |
13 > done | |
14 M a | |
15 M a | |
16 M a | |
17 M a | |
18 M a | |
19 M a | |
20 M a | |
21 M a | |
22 M a | |
23 M a | |
24 M a | |
25 M a | |
26 M a | |
27 M a | |
28 M a | |
29 M a | |
30 M a | |
31 M a | |
32 M a | |
33 M a | |
6327
6d952dc2abc9
dirstate: refactor granularity code, add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
34 |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
35 $ echo test > b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
36 $ mkdir dir1 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
37 $ echo test > dir1/c |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
38 $ echo test > d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
39 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
40 $ echo test > e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
41 #if execbit |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
42 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
|
43 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
|
44 $ chmod +x e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
45 #endif |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
46 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
47 $ 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
|
48 adding dir1/c |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
49 $ hg commit -m test2 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
50 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
51 $ cat >> $TESTTMP/dirstaterace.py << EOF |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
52 > from mercurial import ( |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
53 > context, |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
54 > extensions, |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
55 > ) |
41068
28a4fb793ba1
extensions: deprecate extsetup without a `ui` argument (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
40296
diff
changeset
|
56 > def extsetup(ui): |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
57 > 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
|
58 > def overridechecklookup(orig, self, files): |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
59 > # 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
|
60 > 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
|
61 > cwd=self._repo.root) |
32651
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
62 > return orig(self, files) |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
63 > EOF |
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 $ hg debugrebuilddirstate |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
66 $ hg debugdirstate |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
67 n 0 -1 unset a |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
68 n 0 -1 unset b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
69 n 0 -1 unset d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
70 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
|
71 n 0 -1 unset e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
72 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
73 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
|
74 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
|
75 anyway. |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
76 |
32751
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
77 $ cat > $TESTTMP/dirstaterace.sh <<EOF |
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
78 > 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
|
79 > EOF |
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
80 |
627eaab1ad07
tests: factor external procedures out for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32678
diff
changeset
|
81 $ 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
|
82 M d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
83 M e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
84 ! b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
85 ! dir1/c |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
86 $ hg debugdirstate |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
87 n 644 2 * a (glob) |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
88 n 0 -1 unset b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
89 n 0 -1 unset d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
90 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
|
91 n 0 -1 unset e |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
92 |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
93 $ hg status |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
94 ! b |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
95 ! d |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
96 ! dir1/c |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
12279
diff
changeset
|
97 ! e |
32752
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
98 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
99 $ rmdir d e |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
100 $ hg update -C -q . |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
101 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
102 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
|
103 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
|
104 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
|
105 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
106 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
|
107 condition (see issue5584 for detail). |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
108 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
109 $ hg parents -q |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
110 1:* (glob) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
111 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
112 $ hg debugrebuilddirstate |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
113 $ hg debugdirstate |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
114 n 0 -1 unset a |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
115 n 0 -1 unset b |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
116 n 0 -1 unset d |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
117 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
|
118 n 0 -1 unset e |
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 $ cat > $TESTTMP/dirstaterace.sh <<EOF |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
121 > # 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
|
122 > # |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
123 > # 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
|
124 > # 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
|
125 > # 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
|
126 > # (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
|
127 > # 4. "hg status" acquires wlock |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
128 > # (.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
|
129 > # 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
|
130 > # (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
|
131 > # 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
|
132 > # (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
|
133 > # |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
134 > # 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
|
135 > # 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
|
136 > |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
137 > hg update -q -C 0 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
138 > 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
|
139 > EOF |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
140 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
141 "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
|
142 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
|
143 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
|
144 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
145 - "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
|
146 - "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
|
147 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
148 $ 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
|
149 skip updating dirstate: identity mismatch |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
150 M a |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
151 ! d |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
152 ! dir1/c |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
153 |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
154 $ hg parents -q |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
155 0:* (glob) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
156 $ hg files |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
157 a |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32751
diff
changeset
|
158 $ hg debugdirstate |
32802
f40eec7af044
test-dirstate-race: back out changeset c82fa7efcbc8
Siddharth Agarwal <sid0@fb.com>
parents:
32771
diff
changeset
|
159 n * * * a (glob) |
32815
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
160 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
161 $ rm b |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
162 |
32816
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
163 #if fsmonitor |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
164 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
165 Create fsmonitor state. |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
166 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
167 $ hg status |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
168 $ 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
|
169 .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
|
170 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
171 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
|
172 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
|
173 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
|
174 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
|
175 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
176 $ 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
|
177 $ hg debugrebuilddirstate |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
178 $ 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
|
179 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
180 $ 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
|
181 > 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
|
182 > EOF |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
183 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
184 $ 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
|
185 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
|
186 $ 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
|
187 .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
|
188 |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
189 #endif |
1b25c648d5b7
fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32815
diff
changeset
|
190 |
32815
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
191 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
|
192 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
193 $ echo c2 > a |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
194 $ echo c2 > b |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
195 $ hg add b |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
196 $ hg commit -m c2 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
197 created new head |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
198 $ echo c3 >> a |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
199 $ hg commit -m c3 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
200 $ hg update 2 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
201 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
|
202 $ echo c4 >> a |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
203 $ echo c4 >> b |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
204 $ hg commit -m c4 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
205 created new head |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
206 |
33577
34a8ef358c93
test-dirstate-race: hide irrelevant hg status output
Siddharth Agarwal <sid0@fb.com>
parents:
33139
diff
changeset
|
207 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
|
208 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
|
209 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
|
210 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
|
211 '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
|
212 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
213 $ 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
|
214 > echo "custom merge tool" |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
215 > 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
|
216 > 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
|
217 > 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
|
218 > EOF |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
219 $ cat >> $HGRCPATH << EOF |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
220 > [extensions] |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
221 > rebase = |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
222 > [merge-tools] |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
223 > test.executable=sh |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
224 > 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
|
225 > EOF |
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 $ hg rebase -s . -d 3 --tool test |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
228 rebasing 4:b08445fd6b2a "c4" (tip) |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
229 merging a |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
230 custom merge tool |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
231 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 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
|
233 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
234 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
|
235 |
15e85dded933
fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
236 $ hg status |