##// END OF EJS Templates
tests: demonstrate missing copy information in working copy with graphlog...
Martin von Zweigbergk -
r42701:75334e5b default
parent child Browse files
Show More
@@ -1,655 +1,665 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 "path": "added",
258 258 "status": "A"
259 259 },
260 260 {
261 261 "path": "copied",
262 262 "source": "modified",
263 263 "status": "A"
264 264 },
265 265 {
266 266 "path": "removed",
267 267 "status": "R"
268 268 },
269 269 {
270 270 "path": "deleted",
271 271 "status": "!"
272 272 },
273 273 {
274 274 "path": "unknown",
275 275 "status": "?"
276 276 },
277 277 {
278 278 "path": "ignored",
279 279 "status": "I"
280 280 },
281 281 {
282 282 "path": ".hgignore",
283 283 "status": "C"
284 284 },
285 285 {
286 286 "path": "modified",
287 287 "status": "C"
288 288 }
289 289 ]
290 290
291 291 $ hg status -A -Tpickle > pickle
292 292 >>> from __future__ import print_function
293 293 >>> from mercurial import util
294 294 >>> pickle = util.pickle
295 295 >>> data = sorted((x[b'status'].decode(), x[b'path'].decode()) for x in pickle.load(open("pickle", r"rb")))
296 296 >>> for s, p in data: print("%s %s" % (s, p))
297 297 ! deleted
298 298 ? pickle
299 299 ? unknown
300 300 A added
301 301 A copied
302 302 C .hgignore
303 303 C modified
304 304 I ignored
305 305 R removed
306 306 $ rm pickle
307 307
308 308 $ echo "^ignoreddir$" > .hgignore
309 309 $ mkdir ignoreddir
310 310 $ touch ignoreddir/file
311 311
312 312 Test templater support:
313 313
314 314 $ hg status -AT "[{status}]\t{if(source, '{source} -> ')}{path}\n"
315 315 [M] .hgignore
316 316 [A] added
317 317 [A] modified -> copied
318 318 [R] removed
319 319 [!] deleted
320 320 [?] ignored
321 321 [?] unknown
322 322 [I] ignoreddir/file
323 323 [C] modified
324 324 $ hg status -AT default
325 325 M .hgignore
326 326 A added
327 327 A copied
328 328 modified
329 329 R removed
330 330 ! deleted
331 331 ? ignored
332 332 ? unknown
333 333 I ignoreddir/file
334 334 C modified
335 335 $ hg status -T compact
336 336 abort: "status" not in template map
337 337 [255]
338 338
339 339 hg status ignoreddir/file:
340 340
341 341 $ hg status ignoreddir/file
342 342
343 343 hg status -i ignoreddir/file:
344 344
345 345 $ hg status -i ignoreddir/file
346 346 I ignoreddir/file
347 347 $ cd ..
348 348
349 349 Check 'status -q' and some combinations
350 350
351 351 $ hg init repo3
352 352 $ cd repo3
353 353 $ touch modified removed deleted ignored
354 354 $ echo "^ignored$" > .hgignore
355 355 $ hg commit -A -m 'initial checkin'
356 356 adding .hgignore
357 357 adding deleted
358 358 adding modified
359 359 adding removed
360 360 $ touch added unknown ignored
361 361 $ hg add added
362 362 $ echo "test" >> modified
363 363 $ hg remove removed
364 364 $ rm deleted
365 365 $ hg copy modified copied
366 366
367 367 Specify working directory revision explicitly, that should be the same as
368 368 "hg status"
369 369
370 370 $ hg status --change "wdir()"
371 371 M modified
372 372 A added
373 373 A copied
374 374 R removed
375 375 ! deleted
376 376 ? unknown
377 377
378 378 Run status with 2 different flags.
379 379 Check if result is the same or different.
380 380 If result is not as expected, raise error
381 381
382 382 $ assert() {
383 383 > hg status $1 > ../a
384 384 > hg status $2 > ../b
385 385 > if diff ../a ../b > /dev/null; then
386 386 > out=0
387 387 > else
388 388 > out=1
389 389 > fi
390 390 > if [ $3 -eq 0 ]; then
391 391 > df="same"
392 392 > else
393 393 > df="different"
394 394 > fi
395 395 > if [ $out -ne $3 ]; then
396 396 > echo "Error on $1 and $2, should be $df."
397 397 > fi
398 398 > }
399 399
400 400 Assert flag1 flag2 [0-same | 1-different]
401 401
402 402 $ assert "-q" "-mard" 0
403 403 $ assert "-A" "-marduicC" 0
404 404 $ assert "-qA" "-mardcC" 0
405 405 $ assert "-qAui" "-A" 0
406 406 $ assert "-qAu" "-marducC" 0
407 407 $ assert "-qAi" "-mardicC" 0
408 408 $ assert "-qu" "-u" 0
409 409 $ assert "-q" "-u" 1
410 410 $ assert "-m" "-a" 1
411 411 $ assert "-r" "-d" 1
412 412 $ cd ..
413 413
414 414 $ hg init repo4
415 415 $ cd repo4
416 416 $ touch modified removed deleted
417 417 $ hg ci -q -A -m 'initial checkin'
418 418 $ touch added unknown
419 419 $ hg add added
420 420 $ hg remove removed
421 421 $ rm deleted
422 422 $ echo x > modified
423 423 $ hg copy modified copied
424 424 $ hg ci -m 'test checkin' -d "1000001 0"
425 425 $ rm *
426 426 $ touch unrelated
427 427 $ hg ci -q -A -m 'unrelated checkin' -d "1000002 0"
428 428
429 429 hg status --change 1:
430 430
431 431 $ hg status --change 1
432 432 M modified
433 433 A added
434 434 A copied
435 435 R removed
436 436
437 437 hg status --change 1 unrelated:
438 438
439 439 $ hg status --change 1 unrelated
440 440
441 441 hg status -C --change 1 added modified copied removed deleted:
442 442
443 443 $ hg status -C --change 1 added modified copied removed deleted
444 444 M modified
445 445 A added
446 446 A copied
447 447 modified
448 448 R removed
449 449
450 450 hg status -A --change 1 and revset:
451 451
452 452 $ hg status -A --change '1|1'
453 453 M modified
454 454 A added
455 455 A copied
456 456 modified
457 457 R removed
458 458 C deleted
459 459
460 460 $ cd ..
461 461
462 462 hg status with --rev and reverted changes:
463 463
464 464 $ hg init reverted-changes-repo
465 465 $ cd reverted-changes-repo
466 466 $ echo a > file
467 467 $ hg add file
468 468 $ hg ci -m a
469 469 $ echo b > file
470 470 $ hg ci -m b
471 471
472 472 reverted file should appear clean
473 473
474 474 $ hg revert -r 0 .
475 475 reverting file
476 476 $ hg status -A --rev 0
477 477 C file
478 478
479 479 #if execbit
480 480 reverted file with changed flag should appear modified
481 481
482 482 $ chmod +x file
483 483 $ hg status -A --rev 0
484 484 M file
485 485
486 486 $ hg revert -r 0 .
487 487 reverting file
488 488
489 489 reverted and committed file with changed flag should appear modified
490 490
491 491 $ hg co -C .
492 492 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
493 493 $ chmod +x file
494 494 $ hg ci -m 'change flag'
495 495 $ hg status -A --rev 1 --rev 2
496 496 M file
497 497 $ hg diff -r 1 -r 2
498 498
499 499 #endif
500 500
501 501 $ cd ..
502 502
503 503 hg status of binary file starting with '\1\n', a separator for metadata:
504 504
505 505 $ hg init repo5
506 506 $ cd repo5
507 507 >>> open("010a", r"wb").write(b"\1\nfoo") and None
508 508 $ hg ci -q -A -m 'initial checkin'
509 509 $ hg status -A
510 510 C 010a
511 511
512 512 >>> open("010a", r"wb").write(b"\1\nbar") and None
513 513 $ hg status -A
514 514 M 010a
515 515 $ hg ci -q -m 'modify 010a'
516 516 $ hg status -A --rev 0:1
517 517 M 010a
518 518
519 519 $ touch empty
520 520 $ hg ci -q -A -m 'add another file'
521 521 $ hg status -A --rev 1:2 010a
522 522 C 010a
523 523
524 524 $ cd ..
525 525
526 526 test "hg status" with "directory pattern" which matches against files
527 527 only known on target revision.
528 528
529 529 $ hg init repo6
530 530 $ cd repo6
531 531
532 532 $ echo a > a.txt
533 533 $ hg add a.txt
534 534 $ hg commit -m '#0'
535 535 $ mkdir -p 1/2/3/4/5
536 536 $ echo b > 1/2/3/4/5/b.txt
537 537 $ hg add 1/2/3/4/5/b.txt
538 538 $ hg commit -m '#1'
539 539
540 540 $ hg update -C 0 > /dev/null
541 541 $ hg status -A
542 542 C a.txt
543 543
544 544 the directory matching against specified pattern should be removed,
545 545 because directory existence prevents 'dirstate.walk()' from showing
546 546 warning message about such pattern.
547 547
548 548 $ test ! -d 1
549 549 $ hg status -A --rev 1 1/2/3/4/5/b.txt
550 550 R 1/2/3/4/5/b.txt
551 551 $ hg status -A --rev 1 1/2/3/4/5
552 552 R 1/2/3/4/5/b.txt
553 553 $ hg status -A --rev 1 1/2/3
554 554 R 1/2/3/4/5/b.txt
555 555 $ hg status -A --rev 1 1
556 556 R 1/2/3/4/5/b.txt
557 557
558 558 $ hg status --config ui.formatdebug=True --rev 1 1
559 559 status = [
560 560 {
561 561 'path': '1/2/3/4/5/b.txt',
562 562 'status': 'R'
563 563 },
564 564 ]
565 565
566 566 #if windows
567 567 $ hg --config ui.slash=false status -A --rev 1 1
568 568 R 1\2\3\4\5\b.txt
569 569 #endif
570 570
571 571 $ cd ..
572 572
573 573 Status after move overwriting a file (issue4458)
574 574 =================================================
575 575
576 576
577 577 $ hg init issue4458
578 578 $ cd issue4458
579 579 $ echo a > a
580 580 $ echo b > b
581 581 $ hg commit -Am base
582 582 adding a
583 583 adding b
584 584
585 585
586 586 with --force
587 587
588 588 $ hg mv b --force a
589 589 $ hg st --copies
590 590 M a
591 591 b
592 592 R b
593 593 $ hg revert --all
594 594 reverting a
595 595 undeleting b
596 596 $ rm *.orig
597 597
598 598 without force
599 599
600 600 $ hg rm a
601 601 $ hg st --copies
602 602 R a
603 603 $ hg mv b a
604 604 $ hg st --copies
605 605 M a
606 606 b
607 607 R b
608 608
609 609 using ui.statuscopies setting
610 610 $ hg st --config ui.statuscopies=true
611 611 M a
612 612 b
613 613 R b
614 614 $ hg st --config ui.statuscopies=false
615 615 M a
616 616 R b
617 617 $ hg st --config ui.tweakdefaults=yes
618 618 M a
619 619 b
620 620 R b
621 621
622 622 using log status template (issue5155)
623 623 $ hg log -Tstatus -r 'wdir()' -C
624 624 changeset: 2147483647:ffffffffffff
625 625 parent: 0:8c55c58b4c0e
626 626 user: test
627 627 date: * (glob)
628 628 files:
629 629 M a
630 630 b
631 631 R b
632 632
633 BROKEN: as above, 'a' should be marked a copy
634 $ hg log -GTstatus -r 'wdir()' -C
635 o changeset: 2147483647:ffffffffffff
636 | parent: 0:8c55c58b4c0e
637 ~ user: test
638 date: * (glob)
639 files:
640 M a
641 R b
642
633 643
634 644 Other "bug" highlight, the revision status does not report the copy information.
635 645 This is buggy behavior.
636 646
637 647 $ hg commit -m 'blah'
638 648 $ hg st --copies --change .
639 649 M a
640 650 R b
641 651
642 652 using log status template, the copy information is displayed correctly.
643 653 $ hg log -Tstatus -r. -C
644 654 changeset: 1:6685fde43d21
645 655 tag: tip
646 656 user: test
647 657 date: * (glob)
648 658 summary: blah
649 659 files:
650 660 M a
651 661 b
652 662 R b
653 663
654 664
655 665 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now