comparison tests/test-tag.t @ 31996:e6e1884df298

track-tags: write all tag changes to a file The tag changes information we compute is now written to disk. This gives hooks full access to that data. The format picked for that file uses a 2 characters prefix for the action: -R: tag removed +A: tag added -M: tag moved (old value) +M: tag moved (new value) This format allows hooks to easily select the line that matters to them without having to post process the file too much. Here is a couple of examples: * to select all newly tagged changeset, match "^+", * to detect tag move, match "^.M", * to detect tag deletion, match "-R". Once again we rely on the fact the tag tests run through all possible situations to test this change.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Tue, 28 Mar 2017 10:15:02 +0200
parents fe9c4d614600
children bca8ad5c1256
comparison
equal deleted inserted replaced
31995:fe9c4d614600 31996:e6e1884df298
9 > #!/bin/sh 9 > #!/bin/sh
10 > # escape the "$" otherwise the test runner interpret it when writting the 10 > # escape the "$" otherwise the test runner interpret it when writting the
11 > # file... 11 > # file...
12 > if [ -n "\$HG_TAG_MOVED" ]; then 12 > if [ -n "\$HG_TAG_MOVED" ]; then
13 > echo 'hook: tag changes detected' 13 > echo 'hook: tag changes detected'
14 > sed 's/^/hook: /' .hg/changes/tags.changes
14 > fi 15 > fi
15 > EOF 16 > EOF
16 $ chmod +x taghook.sh 17 $ chmod +x taghook.sh
17 $ hg init test 18 $ hg init test
18 $ cd test 19 $ cd test
35 (this tests also that editor is not invoked, if '--edit' is not 36 (this tests also that editor is not invoked, if '--edit' is not
36 specified) 37 specified)
37 38
38 $ HGEDITOR=cat hg tag "bleah" 39 $ HGEDITOR=cat hg tag "bleah"
39 hook: tag changes detected 40 hook: tag changes detected
41 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 bleah
40 $ hg history 42 $ hg history
41 changeset: 1:d4f0d2909abc 43 changeset: 1:d4f0d2909abc
42 tag: tip 44 tag: tip
43 user: test 45 user: test
44 date: Thu Jan 01 00:00:00 1970 +0000 46 date: Thu Jan 01 00:00:00 1970 +0000
84 abort: tag 'blecch' does not exist 86 abort: tag 'blecch' does not exist
85 [255] 87 [255]
86 88
87 $ hg tag -r 0 "bleah0" 89 $ hg tag -r 0 "bleah0"
88 hook: tag changes detected 90 hook: tag changes detected
91 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 bleah0
89 $ hg tag -l -r 1 "bleah1" 92 $ hg tag -l -r 1 "bleah1"
90 $ hg tag gack gawk gorp 93 $ hg tag gack gawk gorp
91 hook: tag changes detected 94 hook: tag changes detected
95 hook: +A 336fccc858a4eb69609a291105009e484a6b6b8d gack
96 hook: +A 336fccc858a4eb69609a291105009e484a6b6b8d gawk
97 hook: +A 336fccc858a4eb69609a291105009e484a6b6b8d gorp
92 $ hg tag -f gack 98 $ hg tag -f gack
93 hook: tag changes detected 99 hook: tag changes detected
100 hook: -M 336fccc858a4eb69609a291105009e484a6b6b8d gack
101 hook: +M 799667b6f2d9b957f73fa644a918c2df22bab58f gack
94 $ hg tag --remove gack gorp 102 $ hg tag --remove gack gorp
95 hook: tag changes detected 103 hook: tag changes detected
104 hook: -R 799667b6f2d9b957f73fa644a918c2df22bab58f gack
105 hook: -R 336fccc858a4eb69609a291105009e484a6b6b8d gorp
96 106
97 $ hg tag "bleah " 107 $ hg tag "bleah "
98 abort: tag 'bleah' already exists (use -f to force) 108 abort: tag 'bleah' already exists (use -f to force)
99 [255] 109 [255]
100 $ hg tag " bleah" 110 $ hg tag " bleah"
103 $ hg tag " bleah" 113 $ hg tag " bleah"
104 abort: tag 'bleah' already exists (use -f to force) 114 abort: tag 'bleah' already exists (use -f to force)
105 [255] 115 [255]
106 $ hg tag -r 0 " bleahbleah " 116 $ hg tag -r 0 " bleahbleah "
107 hook: tag changes detected 117 hook: tag changes detected
118 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 bleahbleah
108 $ hg tag -r 0 " bleah bleah " 119 $ hg tag -r 0 " bleah bleah "
109 hook: tag changes detected 120 hook: tag changes detected
121 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 bleah bleah
110 122
111 $ cat .hgtags 123 $ cat .hgtags
112 acb14030fe0a21b60322c440ad2d20cf7685a376 bleah 124 acb14030fe0a21b60322c440ad2d20cf7685a376 bleah
113 acb14030fe0a21b60322c440ad2d20cf7685a376 bleah0 125 acb14030fe0a21b60322c440ad2d20cf7685a376 bleah0
114 336fccc858a4eb69609a291105009e484a6b6b8d gack 126 336fccc858a4eb69609a291105009e484a6b6b8d gack
134 $ hg tag "foobar" 146 $ hg tag "foobar"
135 abort: working directory is not at a branch head (use -f to force) 147 abort: working directory is not at a branch head (use -f to force)
136 [255] 148 [255]
137 $ hg tag -f "foobar" 149 $ hg tag -f "foobar"
138 hook: tag changes detected 150 hook: tag changes detected
151 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 foobar
139 $ cat .hgtags 152 $ cat .hgtags
140 acb14030fe0a21b60322c440ad2d20cf7685a376 foobar 153 acb14030fe0a21b60322c440ad2d20cf7685a376 foobar
141 $ cat .hg/localtags 154 $ cat .hg/localtags
142 d4f0d2909abc9290e2773c08837d70c1794e3f5a bleah1 155 d4f0d2909abc9290e2773c08837d70c1794e3f5a bleah1
143 acb14030fe0a21b60322c440ad2d20cf7685a376 localblah 156 acb14030fe0a21b60322c440ad2d20cf7685a376 localblah
192 date: Thu Jan 01 00:00:00 1970 +0000 205 date: Thu Jan 01 00:00:00 1970 +0000
193 summary: Removed tag gack, gorp 206 summary: Removed tag gack, gorp
194 207
195 $ hg clone -q -rbleah1 test test1 208 $ hg clone -q -rbleah1 test test1
196 hook: tag changes detected 209 hook: tag changes detected
210 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 bleah
197 $ hg -R test1 parents --style=compact 211 $ hg -R test1 parents --style=compact
198 1[tip] d4f0d2909abc 1970-01-01 00:00 +0000 test 212 1[tip] d4f0d2909abc 1970-01-01 00:00 +0000 test
199 Added tag bleah for changeset acb14030fe0a 213 Added tag bleah for changeset acb14030fe0a
200 214
201 $ hg clone -q -r5 test#bleah1 test2 215 $ hg clone -q -r5 test#bleah1 test2
202 hook: tag changes detected 216 hook: tag changes detected
217 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 bleah
218 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 bleah0
219 hook: +A 336fccc858a4eb69609a291105009e484a6b6b8d gawk
203 $ hg -R test2 parents --style=compact 220 $ hg -R test2 parents --style=compact
204 5[tip] b4bb47aaff09 1970-01-01 00:00 +0000 test 221 5[tip] b4bb47aaff09 1970-01-01 00:00 +0000 test
205 Removed tag gack, gorp 222 Removed tag gack, gorp
206 223
207 $ hg clone -q -U test#bleah1 test3 224 $ hg clone -q -U test#bleah1 test3
208 hook: tag changes detected 225 hook: tag changes detected
226 hook: +A acb14030fe0a21b60322c440ad2d20cf7685a376 bleah
209 $ hg -R test3 parents --style=compact 227 $ hg -R test3 parents --style=compact
210 228
211 $ cd test 229 $ cd test
212 230
213 Issue601: hg tag doesn't do the right thing if .hgtags or localtags 231 Issue601: hg tag doesn't do the right thing if .hgtags or localtags
232 $ hg ci -m'broken manual edit of .hgtags' 250 $ hg ci -m'broken manual edit of .hgtags'
233 $ cat .hgtags; echo 251 $ cat .hgtags; echo
234 acb14030fe0a21b60322c440ad2d20cf7685a376 foobar 252 acb14030fe0a21b60322c440ad2d20cf7685a376 foobar
235 $ hg tag newline 253 $ hg tag newline
236 hook: tag changes detected 254 hook: tag changes detected
255 hook: +A a0eea09de1eeec777b46f2085260a373b2fbc293 newline
237 $ cat .hgtags; echo 256 $ cat .hgtags; echo
238 acb14030fe0a21b60322c440ad2d20cf7685a376 foobar 257 acb14030fe0a21b60322c440ad2d20cf7685a376 foobar
239 a0eea09de1eeec777b46f2085260a373b2fbc293 newline 258 a0eea09de1eeec777b46f2085260a373b2fbc293 newline
240 259
241 260
246 (branches are permanent and global, did you want a bookmark?) 265 (branches are permanent and global, did you want a bookmark?)
247 $ hg ci -m"discouraged" 266 $ hg ci -m"discouraged"
248 $ hg tag tag-and-branch-same-name 267 $ hg tag tag-and-branch-same-name
249 warning: tag tag-and-branch-same-name conflicts with existing branch name 268 warning: tag tag-and-branch-same-name conflicts with existing branch name
250 hook: tag changes detected 269 hook: tag changes detected
270 hook: +A fc93d2ea1cd78e91216c6cfbbf26747c10ce11ae tag-and-branch-same-name
251 271
252 test custom commit messages 272 test custom commit messages
253 273
254 $ cat > editor.sh << '__EOF__' 274 $ cat > editor.sh << '__EOF__'
255 > echo "==== before editing" 275 > echo "==== before editing"
331 HG: user: test 351 HG: user: test
332 HG: branch 'tag-and-branch-same-name' 352 HG: branch 'tag-and-branch-same-name'
333 HG: changed .hgtags 353 HG: changed .hgtags
334 ==== 354 ====
335 hook: tag changes detected 355 hook: tag changes detected
356 hook: +A 75a534207be6b03576e0c7a4fa5708d045f1c876 custom-tag
336 $ hg log -l1 --template "{desc}\n" 357 $ hg log -l1 --template "{desc}\n"
337 custom tag message 358 custom tag message
338 second line 359 second line
339 360
340 361
341 local tag with .hgtags modified 362 local tag with .hgtags modified
342 363
343 $ hg tag hgtags-modified 364 $ hg tag hgtags-modified
344 hook: tag changes detected 365 hook: tag changes detected
366 hook: +A 0f26aaea6f74c3ed6c4aad8844403c9ba128d23a hgtags-modified
345 $ hg rollback 367 $ hg rollback
346 repository tip rolled back to revision 13 (undo commit) 368 repository tip rolled back to revision 13 (undo commit)
347 working directory now based on revision 13 369 working directory now based on revision 13
348 $ hg st 370 $ hg st
349 M .hgtags 371 M .hgtags
360 $ hg merge -t internal:local 382 $ hg merge -t internal:local
361 0 files updated, 1 files merged, 0 files removed, 0 files unresolved 383 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
362 (branch merge, don't forget to commit) 384 (branch merge, don't forget to commit)
363 $ hg ci -m 'merge named branch' 385 $ hg ci -m 'merge named branch'
364 hook: tag changes detected 386 hook: tag changes detected
387 hook: -R acb14030fe0a21b60322c440ad2d20cf7685a376 bleah
388 hook: -R acb14030fe0a21b60322c440ad2d20cf7685a376 bleah bleah
389 hook: -R acb14030fe0a21b60322c440ad2d20cf7685a376 bleah0
390 hook: -R acb14030fe0a21b60322c440ad2d20cf7685a376 bleahbleah
391 hook: -R 336fccc858a4eb69609a291105009e484a6b6b8d gawk
365 $ hg up 13 392 $ hg up 13
366 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 393 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
367 $ hg tag new-topo-head 394 $ hg tag new-topo-head
368 hook: tag changes detected 395 hook: tag changes detected
396 hook: +A 0f26aaea6f74c3ed6c4aad8844403c9ba128d23a new-topo-head
369 397
370 tagging on null rev 398 tagging on null rev
371 399
372 $ hg up null 400 $ hg up null
373 0 files updated, 0 files merged, 2 files removed, 0 files unresolved 401 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
431 $ cat > "$TESTTMP/issue3344.sh" <<EOF 459 $ cat > "$TESTTMP/issue3344.sh" <<EOF
432 > hg push "$TESTTMP/repo-tag-target" 460 > hg push "$TESTTMP/repo-tag-target"
433 > EOF 461 > EOF
434 $ hg -R repo-tag --config hooks.commit="sh ../issue3344.sh" tag tag 462 $ hg -R repo-tag --config hooks.commit="sh ../issue3344.sh" tag tag
435 hook: tag changes detected 463 hook: tag changes detected
464 hook: +A be090ea6625635128e90f7d89df8beeb2bcc1653 tag
436 pushing to $TESTTMP/repo-tag-target (glob) 465 pushing to $TESTTMP/repo-tag-target (glob)
437 searching for changes 466 searching for changes
438 adding changesets 467 adding changesets
439 adding manifests 468 adding manifests
440 adding file changes 469 adding file changes
441 added 2 changesets with 2 changes to 2 files 470 added 2 changesets with 2 changes to 2 files
442 hook: tag changes detected 471 hook: tag changes detected
472 hook: +A be090ea6625635128e90f7d89df8beeb2bcc1653 tag
443 473
444 automatically merge resolvable tag conflicts (i.e. tags that differ in rank) 474 automatically merge resolvable tag conflicts (i.e. tags that differ in rank)
445 create two clones with some different tags as well as some common tags 475 create two clones with some different tags as well as some common tags
446 check that we can merge tags that differ in rank 476 check that we can merge tags that differ in rank
447 477
450 $ echo c0 > f0 480 $ echo c0 > f0
451 $ hg ci -A -m0 481 $ hg ci -A -m0
452 adding f0 482 adding f0
453 $ hg tag tbase 483 $ hg tag tbase
454 hook: tag changes detected 484 hook: tag changes detected
485 hook: +A 6cee5c8f3e5b4ae1a3996d2f6489c3e08eb5aea7 tbase
455 $ hg up -qr '.^' 486 $ hg up -qr '.^'
456 $ hg log -r 'wdir()' -T "{latesttagdistance}\n" 487 $ hg log -r 'wdir()' -T "{latesttagdistance}\n"
457 1 488 1
458 $ hg up -q 489 $ hg up -q
459 $ hg log -r 'wdir()' -T "{latesttagdistance}\n" 490 $ hg log -r 'wdir()' -T "{latesttagdistance}\n"
466 $ echo c1 > f1 497 $ echo c1 > f1
467 $ hg ci -A -m1 498 $ hg ci -A -m1
468 adding f1 499 adding f1
469 $ hg tag t1 t2 t3 500 $ hg tag t1 t2 t3
470 hook: tag changes detected 501 hook: tag changes detected
502 hook: +A 4f3e9b90005b68b4d8a3f4355cedc302a8364f5c t1
503 hook: +A 4f3e9b90005b68b4d8a3f4355cedc302a8364f5c t2
504 hook: +A 4f3e9b90005b68b4d8a3f4355cedc302a8364f5c t3
471 $ hg tag --remove t2 505 $ hg tag --remove t2
472 hook: tag changes detected 506 hook: tag changes detected
507 hook: -R 4f3e9b90005b68b4d8a3f4355cedc302a8364f5c t2
473 $ hg tag t5 508 $ hg tag t5
474 hook: tag changes detected 509 hook: tag changes detected
510 hook: +A 875517b4806a848f942811a315a5bce30804ae85 t5
475 $ echo c2 > f2 511 $ echo c2 > f2
476 $ hg ci -A -m2 512 $ hg ci -A -m2
477 adding f2 513 adding f2
478 $ hg tag -f t3 514 $ hg tag -f t3
479 hook: tag changes detected 515 hook: tag changes detected
516 hook: -M 4f3e9b90005b68b4d8a3f4355cedc302a8364f5c t3
517 hook: +M 79505d5360b07e3e79d1052e347e73c02b8afa5b t3
480 518
481 $ cd ../repo-automatic-tag-merge 519 $ cd ../repo-automatic-tag-merge
482 $ echo c3 > f3 520 $ echo c3 > f3
483 $ hg ci -A -m3 521 $ hg ci -A -m3
484 adding f3 522 adding f3
485 $ hg tag -f t4 t5 t6 523 $ hg tag -f t4 t5 t6
486 hook: tag changes detected 524 hook: tag changes detected
525 hook: +A 9aa4e1292a27a248f8d07339bed9931d54907be7 t4
526 hook: +A 9aa4e1292a27a248f8d07339bed9931d54907be7 t5
527 hook: +A 9aa4e1292a27a248f8d07339bed9931d54907be7 t6
487 528
488 $ hg up -q '.^' 529 $ hg up -q '.^'
489 $ hg log -r 'wdir()' -T "{changessincelatesttag} changes since {latesttag}\n" 530 $ hg log -r 'wdir()' -T "{changessincelatesttag} changes since {latesttag}\n"
490 1 changes since t4:t5:t6 531 1 changes since t4:t5:t6
491 $ hg log -r '.' -T "{changessincelatesttag} changes since {latesttag}\n" 532 $ hg log -r '.' -T "{changessincelatesttag} changes since {latesttag}\n"
495 1 changes since t4:t5:t6 536 1 changes since t4:t5:t6
496 $ hg up -qC 537 $ hg up -qC
497 538
498 $ hg tag --remove t5 539 $ hg tag --remove t5
499 hook: tag changes detected 540 hook: tag changes detected
541 hook: -R 9aa4e1292a27a248f8d07339bed9931d54907be7 t5
500 $ echo c4 > f4 542 $ echo c4 > f4
501 $ hg log -r '.' -T "{changessincelatesttag} changes since {latesttag}\n" 543 $ hg log -r '.' -T "{changessincelatesttag} changes since {latesttag}\n"
502 2 changes since t4:t6 544 2 changes since t4:t6
503 $ hg log -r '.' -T "{latesttag % '{latesttag}\n'}" 545 $ hg log -r '.' -T "{latesttag % '{latesttag}\n'}"
504 t4 546 t4
514 adding f4 556 adding f4
515 $ hg log -r 'wdir()' -T "{changessincelatesttag} changes since {latesttag}\n" 557 $ hg log -r 'wdir()' -T "{changessincelatesttag} changes since {latesttag}\n"
516 4 changes since t4:t6 558 4 changes since t4:t6
517 $ hg tag t2 559 $ hg tag t2
518 hook: tag changes detected 560 hook: tag changes detected
561 hook: +A 929bca7b18d067cbf3844c3896319a940059d748 t2
519 $ hg tag -f t6 562 $ hg tag -f t6
520 hook: tag changes detected 563 hook: tag changes detected
564 hook: -M 9aa4e1292a27a248f8d07339bed9931d54907be7 t6
565 hook: +M 09af2ce14077a94effef208b49a718f4836d4338 t6
521 566
522 $ cd ../repo-automatic-tag-merge-clone 567 $ cd ../repo-automatic-tag-merge-clone
523 $ hg pull 568 $ hg pull
524 pulling from $TESTTMP/repo-automatic-tag-merge (glob) 569 pulling from $TESTTMP/repo-automatic-tag-merge (glob)
525 searching for changes 570 searching for changes
526 adding changesets 571 adding changesets
527 adding manifests 572 adding manifests
528 adding file changes 573 adding file changes
529 added 6 changesets with 6 changes to 3 files (+1 heads) 574 added 6 changesets with 6 changes to 3 files (+1 heads)
530 hook: tag changes detected 575 hook: tag changes detected
576 hook: +A 929bca7b18d067cbf3844c3896319a940059d748 t2
577 hook: +A 9aa4e1292a27a248f8d07339bed9931d54907be7 t4
578 hook: -R 875517b4806a848f942811a315a5bce30804ae85 t5
579 hook: +A 09af2ce14077a94effef208b49a718f4836d4338 t6
531 (run 'hg heads' to see heads, 'hg merge' to merge) 580 (run 'hg heads' to see heads, 'hg merge' to merge)
532 $ hg merge --tool internal:tagmerge 581 $ hg merge --tool internal:tagmerge
533 merging .hgtags 582 merging .hgtags
534 2 files updated, 1 files merged, 0 files removed, 0 files unresolved 583 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
535 (branch merge, don't forget to commit) 584 (branch merge, don't forget to commit)
587 636
588 $ hg update -C -r tip 637 $ hg update -C -r tip
589 3 files updated, 0 files merged, 2 files removed, 0 files unresolved 638 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
590 $ hg tag t7 639 $ hg tag t7
591 hook: tag changes detected 640 hook: tag changes detected
641 hook: +A b325cc5b642c5b465bdbe8c09627cb372de3d47d t7
592 $ hg update -C -r 'first(sort(head()))' 642 $ hg update -C -r 'first(sort(head()))'
593 3 files updated, 0 files merged, 2 files removed, 0 files unresolved 643 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
594 $ printf "%s %s\n" `hg log -r . --template "{node} t7"` >> .hgtags 644 $ printf "%s %s\n" `hg log -r . --template "{node} t7"` >> .hgtags
595 $ hg commit -m "manually add conflicting t7 tag" 645 $ hg commit -m "manually add conflicting t7 tag"
596 hook: tag changes detected 646 hook: tag changes detected
647 hook: -R 929bca7b18d067cbf3844c3896319a940059d748 t2
648 hook: +A 875517b4806a848f942811a315a5bce30804ae85 t5
649 hook: -M b325cc5b642c5b465bdbe8c09627cb372de3d47d t7
650 hook: +M ea918d56be86a4afc5a95312e8b6750e1428d9d2 t7
597 $ hg merge --tool internal:tagmerge 651 $ hg merge --tool internal:tagmerge
598 merging .hgtags 652 merging .hgtags
599 automatic .hgtags merge failed 653 automatic .hgtags merge failed
600 the following 1 tags are in conflict: t7 654 the following 1 tags are in conflict: t7
601 automatic tag merging of .hgtags failed! (use 'hg resolve --tool :merge' or another merge tool of your choice) 655 automatic tag merging of .hgtags failed! (use 'hg resolve --tool :merge' or another merge tool of your choice)
627 $ echo c5 > f5 681 $ echo c5 > f5
628 $ hg ci -A -m5 682 $ hg ci -A -m5
629 adding f5 683 adding f5
630 $ hg tag -f t7 684 $ hg tag -f t7
631 hook: tag changes detected 685 hook: tag changes detected
686 hook: -M ea918d56be86a4afc5a95312e8b6750e1428d9d2 t7
687 hook: +M fd3a9e394ce3afb354a496323bf68ac1755a30de t7
632 $ hg update -r 'p1(t7)' 688 $ hg update -r 'p1(t7)'
633 1 files updated, 0 files merged, 1 files removed, 0 files unresolved 689 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
634 $ printf '' > .hgtags 690 $ printf '' > .hgtags
635 $ hg commit -m 'delete all tags' 691 $ hg commit -m 'delete all tags'
636 created new head 692 created new head