##// END OF EJS Templates
status: add test that shows that the Rust implementation has a bug...
Raphaël Gomès -
r47217:40c8ae49 stable
parent child Browse files
Show More
@@ -1,682 +1,694 b''
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 tweaking defaults works
111 111 $ hg status --cwd a --config ui.tweakdefaults=yes
112 112 ? 1/in_a_1
113 113 ? in_a
114 114 ? ../b/1/in_b_1
115 115 ? ../b/2/in_b_2
116 116 ? ../b/in_b
117 117 ? ../in_root
118 118 $ HGPLAIN=1 hg status --cwd a --config ui.tweakdefaults=yes
119 119 ? a/1/in_a_1 (glob)
120 120 ? a/in_a (glob)
121 121 ? b/1/in_b_1 (glob)
122 122 ? b/2/in_b_2 (glob)
123 123 ? b/in_b (glob)
124 124 ? in_root
125 125 $ HGPLAINEXCEPT=tweakdefaults hg status --cwd a --config ui.tweakdefaults=yes
126 126 ? 1/in_a_1
127 127 ? in_a
128 128 ? ../b/1/in_b_1
129 129 ? ../b/2/in_b_2
130 130 ? ../b/in_b
131 131 ? ../in_root (glob)
132 132
133 133 relative paths can be requested
134 134
135 135 $ hg status --cwd a --config ui.relative-paths=yes
136 136 ? 1/in_a_1
137 137 ? in_a
138 138 ? ../b/1/in_b_1
139 139 ? ../b/2/in_b_2
140 140 ? ../b/in_b
141 141 ? ../in_root
142 142
143 143 $ hg status --cwd a . --config ui.relative-paths=legacy
144 144 ? 1/in_a_1
145 145 ? in_a
146 146 $ hg status --cwd a . --config ui.relative-paths=no
147 147 ? a/1/in_a_1
148 148 ? a/in_a
149 149
150 150 commands.status.relative overrides ui.relative-paths
151 151
152 152 $ cat >> $HGRCPATH <<EOF
153 153 > [ui]
154 154 > relative-paths = False
155 155 > [commands]
156 156 > status.relative = True
157 157 > EOF
158 158 $ hg status --cwd a
159 159 ? 1/in_a_1
160 160 ? in_a
161 161 ? ../b/1/in_b_1
162 162 ? ../b/2/in_b_2
163 163 ? ../b/in_b
164 164 ? ../in_root
165 165 $ HGPLAIN=1 hg status --cwd a
166 166 ? a/1/in_a_1 (glob)
167 167 ? a/in_a (glob)
168 168 ? b/1/in_b_1 (glob)
169 169 ? b/2/in_b_2 (glob)
170 170 ? b/in_b (glob)
171 171 ? in_root
172 172
173 173 if relative paths are explicitly off, tweakdefaults doesn't change it
174 174 $ cat >> $HGRCPATH <<EOF
175 175 > [commands]
176 176 > status.relative = False
177 177 > EOF
178 178 $ hg status --cwd a --config ui.tweakdefaults=yes
179 179 ? a/1/in_a_1
180 180 ? a/in_a
181 181 ? b/1/in_b_1
182 182 ? b/2/in_b_2
183 183 ? b/in_b
184 184 ? in_root
185 185
186 186 $ cd ..
187 187
188 188 $ hg init repo2
189 189 $ cd repo2
190 190 $ touch modified removed deleted ignored
191 191 $ echo "^ignored$" > .hgignore
192 192 $ hg ci -A -m 'initial checkin'
193 193 adding .hgignore
194 194 adding deleted
195 195 adding modified
196 196 adding removed
197 197 $ touch modified added unknown ignored
198 198 $ hg add added
199 199 $ hg remove removed
200 200 $ rm deleted
201 201
202 202 hg status:
203 203
204 204 $ hg status
205 205 A added
206 206 R removed
207 207 ! deleted
208 208 ? unknown
209 209
210 210 hg status modified added removed deleted unknown never-existed ignored:
211 211
212 212 $ hg status modified added removed deleted unknown never-existed ignored
213 213 never-existed: * (glob)
214 214 A added
215 215 R removed
216 216 ! deleted
217 217 ? unknown
218 218
219 219 $ hg copy modified copied
220 220
221 221 hg status -C:
222 222
223 223 $ hg status -C
224 224 A added
225 225 A copied
226 226 modified
227 227 R removed
228 228 ! deleted
229 229 ? unknown
230 230
231 231 hg status -A:
232 232
233 233 $ hg status -A
234 234 A added
235 235 A copied
236 236 modified
237 237 R removed
238 238 ! deleted
239 239 ? unknown
240 240 I ignored
241 241 C .hgignore
242 242 C modified
243 243
244 244 $ hg status -A -T '{status} {path} {node|shortest}\n'
245 245 A added ffff
246 246 A copied ffff
247 247 R removed ffff
248 248 ! deleted ffff
249 249 ? unknown ffff
250 250 I ignored ffff
251 251 C .hgignore ffff
252 252 C modified ffff
253 253
254 254 $ hg status -A -Tjson
255 255 [
256 256 {
257 257 "itemtype": "file",
258 258 "path": "added",
259 259 "status": "A"
260 260 },
261 261 {
262 262 "itemtype": "file",
263 263 "path": "copied",
264 264 "source": "modified",
265 265 "status": "A"
266 266 },
267 267 {
268 268 "itemtype": "file",
269 269 "path": "removed",
270 270 "status": "R"
271 271 },
272 272 {
273 273 "itemtype": "file",
274 274 "path": "deleted",
275 275 "status": "!"
276 276 },
277 277 {
278 278 "itemtype": "file",
279 279 "path": "unknown",
280 280 "status": "?"
281 281 },
282 282 {
283 283 "itemtype": "file",
284 284 "path": "ignored",
285 285 "status": "I"
286 286 },
287 287 {
288 288 "itemtype": "file",
289 289 "path": ".hgignore",
290 290 "status": "C"
291 291 },
292 292 {
293 293 "itemtype": "file",
294 294 "path": "modified",
295 295 "status": "C"
296 296 }
297 297 ]
298 298
299 299 $ hg status -A -Tpickle > pickle
300 300 >>> from __future__ import print_function
301 301 >>> from mercurial import util
302 302 >>> pickle = util.pickle
303 303 >>> data = sorted((x[b'status'].decode(), x[b'path'].decode()) for x in pickle.load(open("pickle", r"rb")))
304 304 >>> for s, p in data: print("%s %s" % (s, p))
305 305 ! deleted
306 306 ? pickle
307 307 ? unknown
308 308 A added
309 309 A copied
310 310 C .hgignore
311 311 C modified
312 312 I ignored
313 313 R removed
314 314 $ rm pickle
315 315
316 316 $ echo "^ignoreddir$" > .hgignore
317 317 $ mkdir ignoreddir
318 318 $ touch ignoreddir/file
319 319
320 320 Test templater support:
321 321
322 322 $ hg status -AT "[{status}]\t{if(source, '{source} -> ')}{path}\n"
323 323 [M] .hgignore
324 324 [A] added
325 325 [A] modified -> copied
326 326 [R] removed
327 327 [!] deleted
328 328 [?] ignored
329 329 [?] unknown
330 330 [I] ignoreddir/file
331 331 [C] modified
332 332 $ hg status -AT default
333 333 M .hgignore
334 334 A added
335 335 A copied
336 336 modified
337 337 R removed
338 338 ! deleted
339 339 ? ignored
340 340 ? unknown
341 341 I ignoreddir/file
342 342 C modified
343 343 $ hg status -T compact
344 344 abort: "status" not in template map
345 345 [255]
346 346
347 347 hg status ignoreddir/file:
348 348
349 349 $ hg status ignoreddir/file
350 350
351 351 hg status -i ignoreddir/file:
352 352
353 353 $ hg status -i ignoreddir/file
354 354 I ignoreddir/file
355 355 $ cd ..
356 356
357 357 Check 'status -q' and some combinations
358 358
359 359 $ hg init repo3
360 360 $ cd repo3
361 361 $ touch modified removed deleted ignored
362 362 $ echo "^ignored$" > .hgignore
363 363 $ hg commit -A -m 'initial checkin'
364 364 adding .hgignore
365 365 adding deleted
366 366 adding modified
367 367 adding removed
368 368 $ touch added unknown ignored
369 369 $ hg add added
370 370 $ echo "test" >> modified
371 371 $ hg remove removed
372 372 $ rm deleted
373 373 $ hg copy modified copied
374 374
375 375 Specify working directory revision explicitly, that should be the same as
376 376 "hg status"
377 377
378 378 $ hg status --change "wdir()"
379 379 M modified
380 380 A added
381 381 A copied
382 382 R removed
383 383 ! deleted
384 384 ? unknown
385 385
386 386 Run status with 2 different flags.
387 387 Check if result is the same or different.
388 388 If result is not as expected, raise error
389 389
390 390 $ assert() {
391 391 > hg status $1 > ../a
392 392 > hg status $2 > ../b
393 393 > if diff ../a ../b > /dev/null; then
394 394 > out=0
395 395 > else
396 396 > out=1
397 397 > fi
398 398 > if [ $3 -eq 0 ]; then
399 399 > df="same"
400 400 > else
401 401 > df="different"
402 402 > fi
403 403 > if [ $out -ne $3 ]; then
404 404 > echo "Error on $1 and $2, should be $df."
405 405 > fi
406 406 > }
407 407
408 408 Assert flag1 flag2 [0-same | 1-different]
409 409
410 410 $ assert "-q" "-mard" 0
411 411 $ assert "-A" "-marduicC" 0
412 412 $ assert "-qA" "-mardcC" 0
413 413 $ assert "-qAui" "-A" 0
414 414 $ assert "-qAu" "-marducC" 0
415 415 $ assert "-qAi" "-mardicC" 0
416 416 $ assert "-qu" "-u" 0
417 417 $ assert "-q" "-u" 1
418 418 $ assert "-m" "-a" 1
419 419 $ assert "-r" "-d" 1
420 420 $ cd ..
421 421
422 422 $ hg init repo4
423 423 $ cd repo4
424 424 $ touch modified removed deleted
425 425 $ hg ci -q -A -m 'initial checkin'
426 426 $ touch added unknown
427 427 $ hg add added
428 428 $ hg remove removed
429 429 $ rm deleted
430 430 $ echo x > modified
431 431 $ hg copy modified copied
432 432 $ hg ci -m 'test checkin' -d "1000001 0"
433 433 $ rm *
434 434 $ touch unrelated
435 435 $ hg ci -q -A -m 'unrelated checkin' -d "1000002 0"
436 436
437 437 hg status --change 1:
438 438
439 439 $ hg status --change 1
440 440 M modified
441 441 A added
442 442 A copied
443 443 R removed
444 444
445 445 hg status --change 1 unrelated:
446 446
447 447 $ hg status --change 1 unrelated
448 448
449 449 hg status -C --change 1 added modified copied removed deleted:
450 450
451 451 $ hg status -C --change 1 added modified copied removed deleted
452 452 M modified
453 453 A added
454 454 A copied
455 455 modified
456 456 R removed
457 457
458 458 hg status -A --change 1 and revset:
459 459
460 460 $ hg status -A --change '1|1'
461 461 M modified
462 462 A added
463 463 A copied
464 464 modified
465 465 R removed
466 466 C deleted
467 467
468 468 $ cd ..
469 469
470 470 hg status with --rev and reverted changes:
471 471
472 472 $ hg init reverted-changes-repo
473 473 $ cd reverted-changes-repo
474 474 $ echo a > file
475 475 $ hg add file
476 476 $ hg ci -m a
477 477 $ echo b > file
478 478 $ hg ci -m b
479 479
480 480 reverted file should appear clean
481 481
482 482 $ hg revert -r 0 .
483 483 reverting file
484 484 $ hg status -A --rev 0
485 485 C file
486 486
487 487 #if execbit
488 488 reverted file with changed flag should appear modified
489 489
490 490 $ chmod +x file
491 491 $ hg status -A --rev 0
492 492 M file
493 493
494 494 $ hg revert -r 0 .
495 495 reverting file
496 496
497 497 reverted and committed file with changed flag should appear modified
498 498
499 499 $ hg co -C .
500 500 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
501 501 $ chmod +x file
502 502 $ hg ci -m 'change flag'
503 503 $ hg status -A --rev 1 --rev 2
504 504 M file
505 505 $ hg diff -r 1 -r 2
506 506
507 507 #endif
508 508
509 509 $ cd ..
510 510
511 511 hg status of binary file starting with '\1\n', a separator for metadata:
512 512
513 513 $ hg init repo5
514 514 $ cd repo5
515 515 >>> open("010a", r"wb").write(b"\1\nfoo") and None
516 516 $ hg ci -q -A -m 'initial checkin'
517 517 $ hg status -A
518 518 C 010a
519 519
520 520 >>> open("010a", r"wb").write(b"\1\nbar") and None
521 521 $ hg status -A
522 522 M 010a
523 523 $ hg ci -q -m 'modify 010a'
524 524 $ hg status -A --rev 0:1
525 525 M 010a
526 526
527 527 $ touch empty
528 528 $ hg ci -q -A -m 'add another file'
529 529 $ hg status -A --rev 1:2 010a
530 530 C 010a
531 531
532 532 $ cd ..
533 533
534 534 test "hg status" with "directory pattern" which matches against files
535 535 only known on target revision.
536 536
537 537 $ hg init repo6
538 538 $ cd repo6
539 539
540 540 $ echo a > a.txt
541 541 $ hg add a.txt
542 542 $ hg commit -m '#0'
543 543 $ mkdir -p 1/2/3/4/5
544 544 $ echo b > 1/2/3/4/5/b.txt
545 545 $ hg add 1/2/3/4/5/b.txt
546 546 $ hg commit -m '#1'
547 547
548 548 $ hg update -C 0 > /dev/null
549 549 $ hg status -A
550 550 C a.txt
551 551
552 552 the directory matching against specified pattern should be removed,
553 553 because directory existence prevents 'dirstate.walk()' from showing
554 554 warning message about such pattern.
555 555
556 556 $ test ! -d 1
557 557 $ hg status -A --rev 1 1/2/3/4/5/b.txt
558 558 R 1/2/3/4/5/b.txt
559 559 $ hg status -A --rev 1 1/2/3/4/5
560 560 R 1/2/3/4/5/b.txt
561 561 $ hg status -A --rev 1 1/2/3
562 562 R 1/2/3/4/5/b.txt
563 563 $ hg status -A --rev 1 1
564 564 R 1/2/3/4/5/b.txt
565 565
566 566 $ hg status --config ui.formatdebug=True --rev 1 1
567 567 status = [
568 568 {
569 569 'itemtype': 'file',
570 570 'path': '1/2/3/4/5/b.txt',
571 571 'status': 'R'
572 572 },
573 573 ]
574 574
575 575 #if windows
576 576 $ hg --config ui.slash=false status -A --rev 1 1
577 577 R 1\2\3\4\5\b.txt
578 578 #endif
579 579
580 580 $ cd ..
581 581
582 582 Status after move overwriting a file (issue4458)
583 583 =================================================
584 584
585 585
586 586 $ hg init issue4458
587 587 $ cd issue4458
588 588 $ echo a > a
589 589 $ echo b > b
590 590 $ hg commit -Am base
591 591 adding a
592 592 adding b
593 593
594 594
595 595 with --force
596 596
597 597 $ hg mv b --force a
598 598 $ hg st --copies
599 599 M a
600 600 b
601 601 R b
602 602 $ hg revert --all
603 603 reverting a
604 604 undeleting b
605 605 $ rm *.orig
606 606
607 607 without force
608 608
609 609 $ hg rm a
610 610 $ hg st --copies
611 611 R a
612 612 $ hg mv b a
613 613 $ hg st --copies
614 614 M a
615 615 b
616 616 R b
617 617
618 618 using ui.statuscopies setting
619 619 $ hg st --config ui.statuscopies=true
620 620 M a
621 621 b
622 622 R b
623 623 $ hg st --config ui.statuscopies=false
624 624 M a
625 625 R b
626 626 $ hg st --config ui.tweakdefaults=yes
627 627 M a
628 628 b
629 629 R b
630 630
631 631 using log status template (issue5155)
632 632 $ hg log -Tstatus -r 'wdir()' -C
633 633 changeset: 2147483647:ffffffffffff
634 634 parent: 0:8c55c58b4c0e
635 635 user: test
636 636 date: * (glob)
637 637 files:
638 638 M a
639 639 b
640 640 R b
641 641
642 642 $ hg log -GTstatus -r 'wdir()' -C
643 643 o changeset: 2147483647:ffffffffffff
644 644 | parent: 0:8c55c58b4c0e
645 645 ~ user: test
646 646 date: * (glob)
647 647 files:
648 648 M a
649 649 b
650 650 R b
651 651
652 652
653 653 Other "bug" highlight, the revision status does not report the copy information.
654 654 This is buggy behavior.
655 655
656 656 $ hg commit -m 'blah'
657 657 $ hg st --copies --change .
658 658 M a
659 659 R b
660 660
661 661 using log status template, the copy information is displayed correctly.
662 662 $ hg log -Tstatus -r. -C
663 663 changeset: 1:6685fde43d21
664 664 tag: tip
665 665 user: test
666 666 date: * (glob)
667 667 summary: blah
668 668 files:
669 669 M a
670 670 b
671 671 R b
672 672
673 673
674 674 $ cd ..
675 675
676 676 Make sure .hg doesn't show up even as a symlink
677 677
678 678 $ hg init repo0
679 679 $ mkdir symlink-repo0
680 680 $ cd symlink-repo0
681 681 $ ln -s ../repo0/.hg
682 682 $ hg status
683
684 Check using include flag with pattern when status does not need to traverse
685 the working directory (issue6483)
686
687 $ cd ..
688 $ hg init issue6483
689 $ cd issue6483
690 $ touch a.py b.rs
691 $ hg add a.py b.rs
692 $ hg st -aI "*.py"
693 A a.py
694 A b.rs (known-bad-output rust !)
General Comments 0
You need to be logged in to leave comments. Login now