##// END OF EJS Templates
tests: stabilize `test-transaction-wc-rollback-race.t` on Windows...
Matt Harbison -
r52839:d7e61891 default
parent child Browse files
Show More
@@ -1,263 +1,264
1 1 =======================================================================
2 2 Check potential race condition around transaction and working copy data
3 3 =======================================================================
4 4
5 5 #testcases bookmarks-in-store bookmarks-wc-level
6 6
7 7 The transaction is garanteed to run with the lock, but may runs without the
8 8 wlock. So if the transaction backup/restore some content related to the
9 9 working-copy and protected by the wlock, we might run into trouble if another
10 10 process grab the wlock and modify them.
11 11
12 12 This test file is testing various cases where such parallel changes happens to
13 13 validate the transaction behavior.
14 14
15 15 Other is used to get a simple pull source. As pull is a simple way to create
16 16 transaction without the wlock.
17 17
18 18 Setup
19 19 =====
20 20
21 21 Avoid long deadlock
22 22
23 23 $ cat << EOF >> $HGRCPATH
24 24 > [ui]
25 25 > timeout=10
26 26 > EOF
27 27
28 28 #if bookmarks-in-store
29 29 $ cat << EOF >> $HGRCPATH
30 30 > [format]
31 31 > bookmarks-in-store = yes
32 32 > EOF
33 33 #endif
34 34
35 35
36 36 $ hg init repo
37 37 $ cd repo
38 38 $ for filename in a b c d e f g h i j k l m; do
39 39 > echo $filename > default_$filename
40 40 > hg add default_$filename
41 41 > hg commit --quiet --message default_$filename
42 42 > done
43 43 $ hg bookmark --rev . foo
44 44 $ hg branch babar
45 45 marked working directory as branch babar
46 46 (branches are permanent and global, did you want a bookmark?)
47 47 $ for filename in a b c d e f g h i j k l m; do
48 48 > echo $filename > babar_$filename
49 49 > hg add babar_$filename
50 50 > hg commit --quiet --message babar_$filename
51 51 > done
52 52 $ hg bookmark --rev . bar
53 53 $ hg up 'desc("default_m")'
54 54 0 files updated, 0 files merged, 13 files removed, 0 files unresolved
55 55 $ hg log -G -T '[{branch}] ({bookmarks}) {desc}\n'
56 56 o [babar] (bar) babar_m
57 57 |
58 58 o [babar] () babar_l
59 59 |
60 60 o [babar] () babar_k
61 61 |
62 62 o [babar] () babar_j
63 63 |
64 64 o [babar] () babar_i
65 65 |
66 66 o [babar] () babar_h
67 67 |
68 68 o [babar] () babar_g
69 69 |
70 70 o [babar] () babar_f
71 71 |
72 72 o [babar] () babar_e
73 73 |
74 74 o [babar] () babar_d
75 75 |
76 76 o [babar] () babar_c
77 77 |
78 78 o [babar] () babar_b
79 79 |
80 80 o [babar] () babar_a
81 81 |
82 82 @ [default] (foo) default_m
83 83 |
84 84 o [default] () default_l
85 85 |
86 86 o [default] () default_k
87 87 |
88 88 o [default] () default_j
89 89 |
90 90 o [default] () default_i
91 91 |
92 92 o [default] () default_h
93 93 |
94 94 o [default] () default_g
95 95 |
96 96 o [default] () default_f
97 97 |
98 98 o [default] () default_e
99 99 |
100 100 o [default] () default_d
101 101 |
102 102 o [default] () default_c
103 103 |
104 104 o [default] () default_b
105 105 |
106 106 o [default] () default_a
107 107
108 108
109 109 $ cat << EOF >> ../txn-close.sh
110 > rm -f $TESTTMP/transaction-continue
111 > $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/transaction-continue $TESTTMP/transaction-waiting
112 > rm -f $TESTTMP/transaction-waiting
110 > rm -f "$TESTTMP/transaction-continue"
111 > "$RUNTESTDIR/testlib/wait-on-file" 5 "$TESTTMP/transaction-continue" "$TESTTMP/transaction-waiting"
112 > rm -f "$TESTTMP/transaction-waiting"
113 113 > exit 1
114 114 > EOF
115
115 116 $ cat << EOF >> .hg/hgrc
116 117 > [hooks]
117 > pretxnclose.test = sh $TESTTMP/txn-close.sh
118 > pretxnclose.test = sh "$TESTTMP/txn-close.sh"
118 119 > EOF
119 120
120 121 Check the overall logic is working, the transaction is holding the `lock` , but
121 122 not the `wlock`, then get aborted on a signal-file.
122 123
123 124 $ hg phase --rev 0
124 125 0: draft
125 126 $ hg phase --public --rev 0 2> ../log.err &
126 127 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/transaction-waiting
127 128 $ echo y | hg --config ui.interactive=yes debuglock --set-wlock
128 129 ready to release the lock (y)? y
129 130 $ echo y | hg --config ui.interactive=yes debuglock --set-lock
130 131 abort: lock is already held
131 132 [255]
132 $ touch $TESTTMP/transaction-continue
133 $ touch "$TESTTMP/transaction-continue"
133 134 $ wait
134 135 $ hg phase --rev 0
135 136 0: draft
136 137 $ cat ../log.err
137 138 abort: pretxnclose.test hook exited with status 1
138 139
139 140 Actual testing
140 141 ==============
141 142
142 143 Changing tracked file
143 144 ---------------------
144 145
145 146 $ hg status
146 147 $ hg phase --public --rev 0 2> ../log.err &
147 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/transaction-waiting
148 $ "$RUNTESTDIR/testlib/wait-on-file" 5 "$TESTTMP/transaction-waiting"
148 149 $ hg forget default_a
149 150 $ hg status
150 151 R default_a
151 $ touch $TESTTMP/transaction-continue
152 $ touch "$TESTTMP/transaction-continue"
152 153 $ wait
153 154 $ hg status
154 155 R default_a
155 156 $ hg revert --all --quiet
156 157
157 158 Changing branch from default
158 159 ----------------------------
159 160
160 161 $ hg branch
161 162 default
162 163 $ hg phase --public --rev 0 2> ../log.err &
163 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/transaction-waiting
164 $ "$RUNTESTDIR/testlib/wait-on-file" 5 "$TESTTMP/transaction-waiting"
164 165 $ hg branch celeste
165 166 marked working directory as branch celeste
166 167 $ hg branch
167 168 celeste
168 $ touch $TESTTMP/transaction-continue
169 $ touch "$TESTTMP/transaction-continue"
169 170 $ wait
170 171 $ hg branch
171 172 celeste
172 173
173 174 Changing branch from another one
174 175 --------------------------------
175 176
176 177 $ hg up babar --quiet
177 178 $ hg branch
178 179 babar
179 180 $ hg phase --public --rev 0 2> ../log.err &
180 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/transaction-waiting
181 $ "$RUNTESTDIR/testlib/wait-on-file" 5 "$TESTTMP/transaction-waiting"
181 182 $ hg branch celeste
182 183 marked working directory as branch celeste
183 184 $ hg branch
184 185 celeste
185 $ touch $TESTTMP/transaction-continue
186 $ touch "$TESTTMP/transaction-continue"
186 187 $ wait
187 188 $ hg branch
188 189 celeste
189 190
190 191 updating working copy
191 192 ---------------------
192 193
193 194 $ hg st
194 195 $ hg log --rev . -T '{desc}\n'
195 196 babar_m
196 197 $ hg phase --public --rev 0 2> ../log.err &
197 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/transaction-waiting
198 $ $RUNTESTDIR/testlib/wait-on-file 5 "$TESTTMP/transaction-waiting"
198 199 $ hg update "parents(.)" --quiet
199 200 $ hg log --rev . -T '{desc}\n'
200 201 babar_l
201 202 $ hg st
202 $ touch $TESTTMP/transaction-continue
203 $ touch "$TESTTMP/transaction-continue"
203 204 $ wait
204 205 $ hg log --rev . -T '{desc}\n'
205 206 babar_l
206 207 $ hg st
207 208
208 209 $ hg purge --no-confirm
209 210 $ hg up --quiet babar
210 211
211 212 Activating a bookmark
212 213 ---------------------
213 214 (without going through the bookmark command)
214 215
215 216 Show the activation/desactivation pattern that exist without taking the store
216 217 lock.
217 218
218 219 $ hg log -r . -T '= {activebookmark} =\n'
219 220 = =
220 221 $ hg up bar
221 222 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
222 223 (activating bookmark bar)
223 224 $ hg log -r . -T '= {activebookmark} =\n'
224 225 = bar =
225 226 $ hg up .
226 227 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
227 228 (leaving bookmark bar)
228 229 $ hg log -r . -T '= {activebookmark} =\n'
229 230 = =
230 231
231 232 Activating the bookmark during a transaction
232 233
233 234 $ hg up . --quiet
234 235 $ hg log -r . -T '= {activebookmark} =\n'
235 236 = =
236 237 $ hg phase --public --rev 0 2> ../log.err &
237 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/transaction-waiting
238 $ $RUNTESTDIR/testlib/wait-on-file 5 "$TESTTMP/transaction-waiting"
238 239 $ hg up bar
239 240 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
240 241 (activating bookmark bar)
241 242 $ hg log -r . -T '= {activebookmark} =\n'
242 243 = bar =
243 $ touch $TESTTMP/transaction-continue
244 $ touch "$TESTTMP/transaction-continue"
244 245 $ wait
245 246 $ hg log -r . -T '= {activebookmark} =\n'
246 247 = bar =
247 248
248 249 Deactivating the bookmark
249 250
250 251 $ hg up bar --quiet
251 252 $ hg log -r . -T '= {activebookmark} =\n'
252 253 = bar =
253 254 $ hg phase --public --rev 0 2> ../log.err &
254 $ $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/transaction-waiting
255 $ $RUNTESTDIR/testlib/wait-on-file 5 "$TESTTMP/transaction-waiting"
255 256 $ hg up .
256 257 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
257 258 (leaving bookmark bar)
258 259 $ hg log -r . -T '= {activebookmark} =\n'
259 260 = =
260 $ touch $TESTTMP/transaction-continue
261 $ touch "$TESTTMP/transaction-continue"
261 262 $ wait
262 263 $ hg log -r . -T '= {activebookmark} =\n'
263 264 = =
General Comments 0
You need to be logged in to leave comments. Login now