Show More
@@ -520,79 +520,104 b' template output:' | |||
|
520 | 520 | } |
|
521 | 521 | ] |
|
522 | 522 | |
|
523 | revision branch name caching implementation | |
|
523 | ||
|
524 | Tests of revision branch name caching | |
|
525 | ||
|
526 | We rev branch cache is updated automatically. In these tests we use a trick to | |
|
527 | trigger rebuilds. We remove the branch head cache and run 'hg head' to cause a | |
|
528 | rebuild that also will populate the rev branch cache. | |
|
524 | 529 | |
|
525 | cache creation | |
|
526 | $ rm .hg/cache/rbc-revs-v1 | |
|
527 | $ hg debugrevspec 'branch("re:a ")' | |
|
528 | 7 | |
|
529 | $ [ -f .hg/cache/rbc-revs-v1 ] || echo no file | |
|
530 | no file | |
|
531 | recovery from invalid cache file | |
|
532 | $ echo > .hg/cache/rbc-revs-v1 | |
|
533 | $ hg debugrevspec 'branch("re:a ")' | |
|
534 | 7 | |
|
535 | cache update NOT fully written from revset | |
|
536 | $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 | |
|
537 | 68b329da9893e34099c7d8ad5cb9c940 .hg/cache/rbc-revs-v1 | |
|
538 | recovery from other corruption - extra trailing data | |
|
530 | revision branch cache is created when building the branch head cache | |
|
531 | $ rm -rf .hg/cache; hg head a -T '{rev}\n' | |
|
532 | 5 | |
|
533 | $ f --hexdump --size .hg/cache/rbc-* | |
|
534 | .hg/cache/rbc-names-v1: size=87 | |
|
535 | 0000: 64 65 66 61 75 6c 74 00 61 00 62 00 63 00 61 20 |default.a.b.c.a | | |
|
536 | 0010: 62 72 61 6e 63 68 20 6e 61 6d 65 20 6d 75 63 68 |branch name much| | |
|
537 | 0020: 20 6c 6f 6e 67 65 72 20 74 68 61 6e 20 74 68 65 | longer than the| | |
|
538 | 0030: 20 64 65 66 61 75 6c 74 20 6a 75 73 74 69 66 69 | default justifi| | |
|
539 | 0040: 63 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 62 |cation used by b| | |
|
540 | 0050: 72 61 6e 63 68 65 73 |ranches| | |
|
541 | .hg/cache/rbc-revs-v1: size=120 | |
|
542 | 0000: 19 70 9c 5a 00 00 00 00 dd 6b 44 0d 00 00 00 01 |.p.Z.....kD.....| | |
|
543 | 0010: 88 1f e2 b9 00 00 00 01 ac 22 03 33 00 00 00 02 |.........".3....| | |
|
544 | 0020: ae e3 9c d1 00 00 00 02 d8 cb c6 1d 00 00 00 01 |................| | |
|
545 | 0030: 58 97 36 a2 00 00 00 03 10 ff 58 95 00 00 00 04 |X.6.......X.....| | |
|
546 | 0040: ee bb 94 44 00 00 00 02 5f 40 61 bb 00 00 00 02 |...D...._@a.....| | |
|
547 | 0050: bf be 84 1b 00 00 00 02 d3 f1 63 45 80 00 00 02 |..........cE....| | |
|
548 | 0060: e3 d4 9c 05 80 00 00 02 e2 3b 55 05 00 00 00 02 |.........;U.....| | |
|
549 | 0070: f8 94 c2 56 80 00 00 03 |...V....| | |
|
550 | recovery from invalid cache revs file with trailing data | |
|
539 | 551 | $ echo >> .hg/cache/rbc-revs-v1 |
|
540 | $ hg debugrevspec 'branch("re:a ")' | |
|
541 |
|
|
|
542 | cache update NOT fully written from revset | |
|
543 | $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 | |
|
544 | e1c06d85ae7b8b032bef47e42e4c08f9 .hg/cache/rbc-revs-v1 | |
|
545 | lazy update after commit | |
|
546 | $ hg tag tag | |
|
547 |
$ |
|
|
548 | d0c0166808ee0a1f0e8894915ad363b6 .hg/cache/rbc-revs-v1 | |
|
549 | $ hg debugrevspec 'branch("re:a ")' | |
|
550 |
|
|
|
551 |
$ |
|
|
552 | d0c0166808ee0a1f0e8894915ad363b6 .hg/cache/rbc-revs-v1 | |
|
553 | update after rollback - cache keeps stripped revs until written for other reasons | |
|
552 | $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug | |
|
553 | 5 | |
|
554 | $ f --size .hg/cache/rbc-revs* | |
|
555 | .hg/cache/rbc-revs-v1: size=120 | |
|
556 | recovery from invalid cache file with partial last record | |
|
557 | $ mv .hg/cache/rbc-revs-v1 . | |
|
558 | $ f -qDB 119 rbc-revs-v1 > .hg/cache/rbc-revs-v1 | |
|
559 | $ f --size .hg/cache/rbc-revs* | |
|
560 | .hg/cache/rbc-revs-v1: size=119 | |
|
561 | $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug | |
|
562 | 5 | |
|
563 | $ f --size .hg/cache/rbc-revs* | |
|
564 | .hg/cache/rbc-revs-v1: size=120 | |
|
565 | recovery from invalid cache file with missing record - no truncation | |
|
566 | $ mv .hg/cache/rbc-revs-v1 . | |
|
567 | $ f -qDB 112 rbc-revs-v1 > .hg/cache/rbc-revs-v1 | |
|
568 | $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug | |
|
569 | 5 | |
|
570 | $ f --size .hg/cache/rbc-revs* | |
|
571 | .hg/cache/rbc-revs-v1: size=120 | |
|
572 | recovery from invalid cache file with some bad records | |
|
573 | $ mv .hg/cache/rbc-revs-v1 . | |
|
574 | $ f -qDB 8 rbc-revs-v1 > .hg/cache/rbc-revs-v1 | |
|
575 | $ f --size .hg/cache/rbc-revs* | |
|
576 | .hg/cache/rbc-revs-v1: size=8 | |
|
577 | $ f -qDB 112 rbc-revs-v1 >> .hg/cache/rbc-revs-v1 | |
|
578 | $ f --size .hg/cache/rbc-revs* | |
|
579 | .hg/cache/rbc-revs-v1: size=120 | |
|
580 | $ hg log -r 'branch(.)' -T '{rev} ' | |
|
581 | 3 4 8 9 10 11 12 13 (no-eol) | |
|
582 | $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug | |
|
583 | 5 | |
|
584 | $ f --size --hexdump --bytes=16 .hg/cache/rbc-revs* | |
|
585 | .hg/cache/rbc-revs-v1: size=120 | |
|
586 | 0000: 19 70 9c 5a 00 00 00 00 dd 6b 44 0d 00 00 00 01 |.p.Z.....kD.....| | |
|
587 | cache is updated when committing | |
|
588 | $ hg branch i-will-regret-this | |
|
589 | marked working directory as branch i-will-regret-this | |
|
590 | (branches are permanent and global, did you want a bookmark?) | |
|
591 | $ hg ci -m regrets | |
|
592 | $ f --size .hg/cache/rbc-* | |
|
593 | .hg/cache/rbc-names-v1: size=106 | |
|
594 | .hg/cache/rbc-revs-v1: size=128 | |
|
595 | update after rollback - the cache will be correct but rbc-names will will still | |
|
596 | contain the branch name even though it no longer is used | |
|
554 | 597 | $ hg up -qr '.^' |
|
555 | 598 | $ hg rollback -qf |
|
556 | $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 | |
|
557 | d8c2acdc229bf942fde1dfdbe8f9d933 .hg/cache/rbc-revs-v1 | |
|
558 | $ hg debugrevspec 'branch("re:a ")' | |
|
559 | 7 | |
|
560 | $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 | |
|
561 | d8c2acdc229bf942fde1dfdbe8f9d933 .hg/cache/rbc-revs-v1 | |
|
562 | handle history mutations that doesn't change the tip node - this is a problem | |
|
563 | with the cache invalidation scheme used by branchmap | |
|
564 | $ hg log -r tip+b -T'{rev}:{node|short} {branch}\n' | |
|
565 | 14:f894c25619d3 c | |
|
566 | 13:e23b5505d1ad b | |
|
567 | $ hg bundle -q --all bu.hg | |
|
568 | $ hg --config extensions.strip= strip --no-b -qr -1: | |
|
569 | $ hg up -q tip | |
|
570 | $ hg branch | |
|
571 | b | |
|
572 | $ hg branch -q hacked | |
|
573 | $ hg ci --amend -qm 'hacked' | |
|
574 | $ hg pull -q bu.hg -r f894c25619d3 | |
|
575 | $ hg log -r tip+b -T'{rev}:{node|short} {branch}\n' | |
|
576 | 14:f894c25619d3 c | |
|
577 | 12:e3d49c0575d8 b | |
|
578 | $ hg debugrevspec 'branch("hacked")' | |
|
579 | 13 | |
|
580 | $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 | |
|
581 | 22424d7e106c894336d9d705b0241bc5 .hg/cache/rbc-revs-v1 | |
|
582 | cleanup, restore old state | |
|
583 | $ hg --config extensions.strip= strip --no-b -qr -2: | |
|
584 | $ hg pull -q bu.hg | |
|
585 | $ rm bu.hg | |
|
586 | $ hg up -qr tip | |
|
587 | $ hg log -r tip -T'{rev}:{node|short}\n' | |
|
588 | 14:f894c25619d3 | |
|
589 | the cache file do not go back to the old state - it still contains the | |
|
590 | now unused 'hacked' branch name) | |
|
591 | $ hg debugrevspec 'branch("re:a ")' | |
|
592 | 7 | |
|
593 | $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 | |
|
594 | d8c2acdc229bf942fde1dfdbe8f9d933 .hg/cache/rbc-revs-v1 | |
|
595 | $ cat .hg/cache/rbc-names-v1 | |
|
596 | default\x00a\x00b\x00c\x00a branch name much longer than the default justification used by branches\x00hacked (no-eol) (esc) | |
|
599 | $ f --size --hexdump .hg/cache/rbc-* | |
|
600 | .hg/cache/rbc-names-v1: size=106 | |
|
601 | 0000: 64 65 66 61 75 6c 74 00 61 00 62 00 63 00 61 20 |default.a.b.c.a | | |
|
602 | 0010: 62 72 61 6e 63 68 20 6e 61 6d 65 20 6d 75 63 68 |branch name much| | |
|
603 | 0020: 20 6c 6f 6e 67 65 72 20 74 68 61 6e 20 74 68 65 | longer than the| | |
|
604 | 0030: 20 64 65 66 61 75 6c 74 20 6a 75 73 74 69 66 69 | default justifi| | |
|
605 | 0040: 63 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 62 |cation used by b| | |
|
606 | 0050: 72 61 6e 63 68 65 73 00 69 2d 77 69 6c 6c 2d 72 |ranches.i-will-r| | |
|
607 | 0060: 65 67 72 65 74 2d 74 68 69 73 |egret-this| | |
|
608 | .hg/cache/rbc-revs-v1: size=120 | |
|
609 | 0000: 19 70 9c 5a 00 00 00 00 dd 6b 44 0d 00 00 00 01 |.p.Z.....kD.....| | |
|
610 | 0010: 88 1f e2 b9 00 00 00 01 ac 22 03 33 00 00 00 02 |.........".3....| | |
|
611 | 0020: ae e3 9c d1 00 00 00 02 d8 cb c6 1d 00 00 00 01 |................| | |
|
612 | 0030: 58 97 36 a2 00 00 00 03 10 ff 58 95 00 00 00 04 |X.6.......X.....| | |
|
613 | 0040: ee bb 94 44 00 00 00 02 5f 40 61 bb 00 00 00 02 |...D...._@a.....| | |
|
614 | 0050: bf be 84 1b 00 00 00 02 d3 f1 63 45 80 00 00 02 |..........cE....| | |
|
615 | 0060: e3 d4 9c 05 80 00 00 02 e2 3b 55 05 00 00 00 02 |.........;U.....| | |
|
616 | 0070: f8 94 c2 56 80 00 00 03 |...V....| | |
|
617 | cache is updated/truncated when stripping - it is thus very hard to get in a | |
|
618 | situation where the cache is out of sync and the hash check detects it | |
|
619 | $ hg --config extensions.strip= strip -r tip --nob | |
|
620 | $ f --size .hg/cache/rbc-revs* | |
|
621 | .hg/cache/rbc-revs-v1: size=112 | |
|
597 | 622 | |
|
598 | 623 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now