##// END OF EJS Templates
tests: test basic template support for status
Matt Mackall -
r25515:e8075329 default
parent child Browse files
Show More
@@ -1,458 +1,485
1 1 $ hg init repo1
2 2 $ cd repo1
3 3 $ mkdir a b a/1 b/1 b/2
4 4 $ touch in_root a/in_a b/in_b a/1/in_a_1 b/1/in_b_1 b/2/in_b_2
5 5
6 6 hg status in repo root:
7 7
8 8 $ hg status
9 9 ? a/1/in_a_1
10 10 ? a/in_a
11 11 ? b/1/in_b_1
12 12 ? b/2/in_b_2
13 13 ? b/in_b
14 14 ? in_root
15 15
16 16 hg status . in repo root:
17 17
18 18 $ hg status .
19 19 ? a/1/in_a_1
20 20 ? a/in_a
21 21 ? b/1/in_b_1
22 22 ? b/2/in_b_2
23 23 ? b/in_b
24 24 ? in_root
25 25
26 26 $ hg status --cwd a
27 27 ? a/1/in_a_1
28 28 ? a/in_a
29 29 ? b/1/in_b_1
30 30 ? b/2/in_b_2
31 31 ? b/in_b
32 32 ? in_root
33 33 $ hg status --cwd a .
34 34 ? 1/in_a_1
35 35 ? in_a
36 36 $ hg status --cwd a ..
37 37 ? 1/in_a_1
38 38 ? in_a
39 39 ? ../b/1/in_b_1
40 40 ? ../b/2/in_b_2
41 41 ? ../b/in_b
42 42 ? ../in_root
43 43
44 44 $ hg status --cwd b
45 45 ? a/1/in_a_1
46 46 ? a/in_a
47 47 ? b/1/in_b_1
48 48 ? b/2/in_b_2
49 49 ? b/in_b
50 50 ? in_root
51 51 $ hg status --cwd b .
52 52 ? 1/in_b_1
53 53 ? 2/in_b_2
54 54 ? in_b
55 55 $ hg status --cwd b ..
56 56 ? ../a/1/in_a_1
57 57 ? ../a/in_a
58 58 ? 1/in_b_1
59 59 ? 2/in_b_2
60 60 ? in_b
61 61 ? ../in_root
62 62
63 63 $ hg status --cwd a/1
64 64 ? a/1/in_a_1
65 65 ? a/in_a
66 66 ? b/1/in_b_1
67 67 ? b/2/in_b_2
68 68 ? b/in_b
69 69 ? in_root
70 70 $ hg status --cwd a/1 .
71 71 ? in_a_1
72 72 $ hg status --cwd a/1 ..
73 73 ? in_a_1
74 74 ? ../in_a
75 75
76 76 $ hg status --cwd b/1
77 77 ? a/1/in_a_1
78 78 ? a/in_a
79 79 ? b/1/in_b_1
80 80 ? b/2/in_b_2
81 81 ? b/in_b
82 82 ? in_root
83 83 $ hg status --cwd b/1 .
84 84 ? in_b_1
85 85 $ hg status --cwd b/1 ..
86 86 ? in_b_1
87 87 ? ../2/in_b_2
88 88 ? ../in_b
89 89
90 90 $ hg status --cwd b/2
91 91 ? a/1/in_a_1
92 92 ? a/in_a
93 93 ? b/1/in_b_1
94 94 ? b/2/in_b_2
95 95 ? b/in_b
96 96 ? in_root
97 97 $ hg status --cwd b/2 .
98 98 ? in_b_2
99 99 $ hg status --cwd b/2 ..
100 100 ? ../1/in_b_1
101 101 ? in_b_2
102 102 ? ../in_b
103 103
104 104 combining patterns with root and patterns without a root works
105 105
106 106 $ hg st a/in_a re:.*b$
107 107 ? a/in_a
108 108 ? b/in_b
109 109
110 110 $ cd ..
111 111
112 112 $ hg init repo2
113 113 $ cd repo2
114 114 $ touch modified removed deleted ignored
115 115 $ echo "^ignored$" > .hgignore
116 116 $ hg ci -A -m 'initial checkin'
117 117 adding .hgignore
118 118 adding deleted
119 119 adding modified
120 120 adding removed
121 121 $ touch modified added unknown ignored
122 122 $ hg add added
123 123 $ hg remove removed
124 124 $ rm deleted
125 125
126 126 hg status:
127 127
128 128 $ hg status
129 129 A added
130 130 R removed
131 131 ! deleted
132 132 ? unknown
133 133
134 134 hg status modified added removed deleted unknown never-existed ignored:
135 135
136 136 $ hg status modified added removed deleted unknown never-existed ignored
137 137 never-existed: * (glob)
138 138 A added
139 139 R removed
140 140 ! deleted
141 141 ? unknown
142 142
143 143 $ hg copy modified copied
144 144
145 145 hg status -C:
146 146
147 147 $ hg status -C
148 148 A added
149 149 A copied
150 150 modified
151 151 R removed
152 152 ! deleted
153 153 ? unknown
154 154
155 155 hg status -A:
156 156
157 157 $ hg status -A
158 158 A added
159 159 A copied
160 160 modified
161 161 R removed
162 162 ! deleted
163 163 ? unknown
164 164 I ignored
165 165 C .hgignore
166 166 C modified
167 167
168 168 $ hg status -A -Tjson
169 169 [
170 170 {
171 171 "path": "added",
172 172 "status": "A"
173 173 },
174 174 {
175 175 "copy": "modified",
176 176 "path": "copied",
177 177 "status": "A"
178 178 },
179 179 {
180 180 "path": "removed",
181 181 "status": "R"
182 182 },
183 183 {
184 184 "path": "deleted",
185 185 "status": "!"
186 186 },
187 187 {
188 188 "path": "unknown",
189 189 "status": "?"
190 190 },
191 191 {
192 192 "path": "ignored",
193 193 "status": "I"
194 194 },
195 195 {
196 196 "path": ".hgignore",
197 197 "status": "C"
198 198 },
199 199 {
200 200 "path": "modified",
201 201 "status": "C"
202 202 }
203 203 ]
204 204
205 205 $ hg status -A -Tpickle > pickle
206 206 >>> import pickle
207 207 >>> print sorted((x['status'], x['path']) for x in pickle.load(open("pickle")))
208 208 [('!', 'deleted'), ('?', 'pickle'), ('?', 'unknown'), ('A', 'added'), ('A', 'copied'), ('C', '.hgignore'), ('C', 'modified'), ('I', 'ignored'), ('R', 'removed')]
209 209 $ rm pickle
210 210
211 211 $ echo "^ignoreddir$" > .hgignore
212 212 $ mkdir ignoreddir
213 213 $ touch ignoreddir/file
214 214
215 Test templater support:
216
217 $ hg status -AT "[{status}]\t{if(copy, '{copy} -> ')}{path}\n"
218 [M] .hgignore
219 [A] added
220 [A] modified -> copied
221 [R] removed
222 [!] deleted
223 [?] ignored
224 [?] unknown
225 [I] ignoreddir/file
226 [C] modified
227 $ hg status -AT default
228 M .hgignore
229 A added
230 A copied
231 modified
232 R removed
233 ! deleted
234 ? ignored
235 ? unknown
236 I ignoreddir/file
237 C modified
238 $ hg status -T compact
239 abort: "status" not in template map
240 [255]
241
215 242 hg status ignoreddir/file:
216 243
217 244 $ hg status ignoreddir/file
218 245
219 246 hg status -i ignoreddir/file:
220 247
221 248 $ hg status -i ignoreddir/file
222 249 I ignoreddir/file
223 250 $ cd ..
224 251
225 252 Check 'status -q' and some combinations
226 253
227 254 $ hg init repo3
228 255 $ cd repo3
229 256 $ touch modified removed deleted ignored
230 257 $ echo "^ignored$" > .hgignore
231 258 $ hg commit -A -m 'initial checkin'
232 259 adding .hgignore
233 260 adding deleted
234 261 adding modified
235 262 adding removed
236 263 $ touch added unknown ignored
237 264 $ hg add added
238 265 $ echo "test" >> modified
239 266 $ hg remove removed
240 267 $ rm deleted
241 268 $ hg copy modified copied
242 269
243 270 Specify working directory revision explicitly, that should be the same as
244 271 "hg status"
245 272
246 273 $ hg status --change "wdir()"
247 274 M modified
248 275 A added
249 276 A copied
250 277 R removed
251 278 ! deleted
252 279 ? unknown
253 280
254 281 Run status with 2 different flags.
255 282 Check if result is the same or different.
256 283 If result is not as expected, raise error
257 284
258 285 $ assert() {
259 286 > hg status $1 > ../a
260 287 > hg status $2 > ../b
261 288 > if diff ../a ../b > /dev/null; then
262 289 > out=0
263 290 > else
264 291 > out=1
265 292 > fi
266 293 > if [ $3 -eq 0 ]; then
267 294 > df="same"
268 295 > else
269 296 > df="different"
270 297 > fi
271 298 > if [ $out -ne $3 ]; then
272 299 > echo "Error on $1 and $2, should be $df."
273 300 > fi
274 301 > }
275 302
276 303 Assert flag1 flag2 [0-same | 1-different]
277 304
278 305 $ assert "-q" "-mard" 0
279 306 $ assert "-A" "-marduicC" 0
280 307 $ assert "-qA" "-mardcC" 0
281 308 $ assert "-qAui" "-A" 0
282 309 $ assert "-qAu" "-marducC" 0
283 310 $ assert "-qAi" "-mardicC" 0
284 311 $ assert "-qu" "-u" 0
285 312 $ assert "-q" "-u" 1
286 313 $ assert "-m" "-a" 1
287 314 $ assert "-r" "-d" 1
288 315 $ cd ..
289 316
290 317 $ hg init repo4
291 318 $ cd repo4
292 319 $ touch modified removed deleted
293 320 $ hg ci -q -A -m 'initial checkin'
294 321 $ touch added unknown
295 322 $ hg add added
296 323 $ hg remove removed
297 324 $ rm deleted
298 325 $ echo x > modified
299 326 $ hg copy modified copied
300 327 $ hg ci -m 'test checkin' -d "1000001 0"
301 328 $ rm *
302 329 $ touch unrelated
303 330 $ hg ci -q -A -m 'unrelated checkin' -d "1000002 0"
304 331
305 332 hg status --change 1:
306 333
307 334 $ hg status --change 1
308 335 M modified
309 336 A added
310 337 A copied
311 338 R removed
312 339
313 340 hg status --change 1 unrelated:
314 341
315 342 $ hg status --change 1 unrelated
316 343
317 344 hg status -C --change 1 added modified copied removed deleted:
318 345
319 346 $ hg status -C --change 1 added modified copied removed deleted
320 347 M modified
321 348 A added
322 349 A copied
323 350 modified
324 351 R removed
325 352
326 353 hg status -A --change 1 and revset:
327 354
328 355 $ hg status -A --change '1|1'
329 356 M modified
330 357 A added
331 358 A copied
332 359 modified
333 360 R removed
334 361 C deleted
335 362
336 363 $ cd ..
337 364
338 365 hg status of binary file starting with '\1\n', a separator for metadata:
339 366
340 367 $ hg init repo5
341 368 $ cd repo5
342 369 >>> open("010a", "wb").write("\1\nfoo")
343 370 $ hg ci -q -A -m 'initial checkin'
344 371 $ hg status -A
345 372 C 010a
346 373
347 374 >>> open("010a", "wb").write("\1\nbar")
348 375 $ hg status -A
349 376 M 010a
350 377 $ hg ci -q -m 'modify 010a'
351 378 $ hg status -A --rev 0:1
352 379 M 010a
353 380
354 381 $ touch empty
355 382 $ hg ci -q -A -m 'add another file'
356 383 $ hg status -A --rev 1:2 010a
357 384 C 010a
358 385
359 386 $ cd ..
360 387
361 388 test "hg status" with "directory pattern" which matches against files
362 389 only known on target revision.
363 390
364 391 $ hg init repo6
365 392 $ cd repo6
366 393
367 394 $ echo a > a.txt
368 395 $ hg add a.txt
369 396 $ hg commit -m '#0'
370 397 $ mkdir -p 1/2/3/4/5
371 398 $ echo b > 1/2/3/4/5/b.txt
372 399 $ hg add 1/2/3/4/5/b.txt
373 400 $ hg commit -m '#1'
374 401
375 402 $ hg update -C 0 > /dev/null
376 403 $ hg status -A
377 404 C a.txt
378 405
379 406 the directory matching against specified pattern should be removed,
380 407 because directory existence prevents 'dirstate.walk()' from showing
381 408 warning message about such pattern.
382 409
383 410 $ test ! -d 1
384 411 $ hg status -A --rev 1 1/2/3/4/5/b.txt
385 412 R 1/2/3/4/5/b.txt
386 413 $ hg status -A --rev 1 1/2/3/4/5
387 414 R 1/2/3/4/5/b.txt
388 415 $ hg status -A --rev 1 1/2/3
389 416 R 1/2/3/4/5/b.txt
390 417 $ hg status -A --rev 1 1
391 418 R 1/2/3/4/5/b.txt
392 419
393 420 $ hg status --config ui.formatdebug=True --rev 1 1
394 421 status = [
395 422 {*'path': '1/2/3/4/5/b.txt'*}, (glob)
396 423 ]
397 424
398 425 #if windows
399 426 $ hg --config ui.slash=false status -A --rev 1 1
400 427 R 1\2\3\4\5\b.txt
401 428 #endif
402 429
403 430 $ cd ..
404 431
405 432 Status after move overwriting a file (issue4458)
406 433 =================================================
407 434
408 435
409 436 $ hg init issue4458
410 437 $ cd issue4458
411 438 $ echo a > a
412 439 $ echo b > b
413 440 $ hg commit -Am base
414 441 adding a
415 442 adding b
416 443
417 444
418 445 with --force
419 446
420 447 $ hg mv b --force a
421 448 $ hg st --copies
422 449 M a
423 450 b
424 451 R b
425 452 $ hg revert --all
426 453 reverting a
427 454 undeleting b
428 455 $ rm *.orig
429 456
430 457 without force
431 458
432 459 $ hg rm a
433 460 $ hg st --copies
434 461 R a
435 462 $ hg mv b a
436 463 $ hg st --copies
437 464 M a
438 465 b
439 466 R b
440 467
441 468 using ui.statuscopies setting
442 469 $ hg st --config ui.statuscopies=true
443 470 M a
444 471 b
445 472 R b
446 473 $ hg st --config ui.statuscopies=false
447 474 M a
448 475 R b
449 476
450 477 Other "bug" highlight, the revision status does not report the copy information.
451 478 This is buggy behavior.
452 479
453 480 $ hg commit -m 'blah'
454 481 $ hg st --copies --change .
455 482 M a
456 483 R b
457 484
458 485 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now