comparison tests/test-branches.t @ 23861:01426cad66dc

tests: rework revision branch cache tests The tests that were added with the revision branch cache in 678f53865c68 had suffered from bit rot in the development iterations. They were no longer that "good". Now, the tests are rewritten and reworked to be more readable and maintainable and relevant for the actual implementation. This also utilizes the new 'f' helper tool for keeping an eye the cache files.
author Mads Kiilerich <madski@unity3d.com>
date Wed, 14 Jan 2015 01:15:26 +0100
parents 678f53865c68
children 7aa1405528a3
comparison
equal deleted inserted replaced
23860:bead0c7b4f68 23861:01426cad66dc
518 "node": "19709c5a4e75bf938f8e349aff97438539bb729e", 518 "node": "19709c5a4e75bf938f8e349aff97438539bb729e",
519 "rev": 0 519 "rev": 0
520 } 520 }
521 ] 521 ]
522 522
523 revision branch name caching implementation 523
524 524 Tests of revision branch name caching
525 cache creation 525
526 $ rm .hg/cache/rbc-revs-v1 526 We rev branch cache is updated automatically. In these tests we use a trick to
527 $ hg debugrevspec 'branch("re:a ")' 527 trigger rebuilds. We remove the branch head cache and run 'hg head' to cause a
528 7 528 rebuild that also will populate the rev branch cache.
529 $ [ -f .hg/cache/rbc-revs-v1 ] || echo no file 529
530 no file 530 revision branch cache is created when building the branch head cache
531 recovery from invalid cache file 531 $ rm -rf .hg/cache; hg head a -T '{rev}\n'
532 $ echo > .hg/cache/rbc-revs-v1 532 5
533 $ hg debugrevspec 'branch("re:a ")' 533 $ f --hexdump --size .hg/cache/rbc-*
534 7 534 .hg/cache/rbc-names-v1: size=87
535 cache update NOT fully written from revset 535 0000: 64 65 66 61 75 6c 74 00 61 00 62 00 63 00 61 20 |default.a.b.c.a |
536 $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 536 0010: 62 72 61 6e 63 68 20 6e 61 6d 65 20 6d 75 63 68 |branch name much|
537 68b329da9893e34099c7d8ad5cb9c940 .hg/cache/rbc-revs-v1 537 0020: 20 6c 6f 6e 67 65 72 20 74 68 61 6e 20 74 68 65 | longer than the|
538 recovery from other corruption - extra trailing data 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 $ echo >> .hg/cache/rbc-revs-v1 551 $ echo >> .hg/cache/rbc-revs-v1
540 $ hg debugrevspec 'branch("re:a ")' 552 $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug
541 7 553 5
542 cache update NOT fully written from revset 554 $ f --size .hg/cache/rbc-revs*
543 $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 555 .hg/cache/rbc-revs-v1: size=120
544 e1c06d85ae7b8b032bef47e42e4c08f9 .hg/cache/rbc-revs-v1 556 recovery from invalid cache file with partial last record
545 lazy update after commit 557 $ mv .hg/cache/rbc-revs-v1 .
546 $ hg tag tag 558 $ f -qDB 119 rbc-revs-v1 > .hg/cache/rbc-revs-v1
547 $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 559 $ f --size .hg/cache/rbc-revs*
548 d0c0166808ee0a1f0e8894915ad363b6 .hg/cache/rbc-revs-v1 560 .hg/cache/rbc-revs-v1: size=119
549 $ hg debugrevspec 'branch("re:a ")' 561 $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug
550 7 562 5
551 $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 563 $ f --size .hg/cache/rbc-revs*
552 d0c0166808ee0a1f0e8894915ad363b6 .hg/cache/rbc-revs-v1 564 .hg/cache/rbc-revs-v1: size=120
553 update after rollback - cache keeps stripped revs until written for other reasons 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 $ hg up -qr '.^' 597 $ hg up -qr '.^'
555 $ hg rollback -qf 598 $ hg rollback -qf
556 $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 599 $ f --size --hexdump .hg/cache/rbc-*
557 d8c2acdc229bf942fde1dfdbe8f9d933 .hg/cache/rbc-revs-v1 600 .hg/cache/rbc-names-v1: size=106
558 $ hg debugrevspec 'branch("re:a ")' 601 0000: 64 65 66 61 75 6c 74 00 61 00 62 00 63 00 61 20 |default.a.b.c.a |
559 7 602 0010: 62 72 61 6e 63 68 20 6e 61 6d 65 20 6d 75 63 68 |branch name much|
560 $ "$TESTDIR/md5sum.py" .hg/cache/rbc-revs-v1 603 0020: 20 6c 6f 6e 67 65 72 20 74 68 61 6e 20 74 68 65 | longer than the|
561 d8c2acdc229bf942fde1dfdbe8f9d933 .hg/cache/rbc-revs-v1 604 0030: 20 64 65 66 61 75 6c 74 20 6a 75 73 74 69 66 69 | default justifi|
562 handle history mutations that doesn't change the tip node - this is a problem 605 0040: 63 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 62 |cation used by b|
563 with the cache invalidation scheme used by branchmap 606 0050: 72 61 6e 63 68 65 73 00 69 2d 77 69 6c 6c 2d 72 |ranches.i-will-r|
564 $ hg log -r tip+b -T'{rev}:{node|short} {branch}\n' 607 0060: 65 67 72 65 74 2d 74 68 69 73 |egret-this|
565 14:f894c25619d3 c 608 .hg/cache/rbc-revs-v1: size=120
566 13:e23b5505d1ad b 609 0000: 19 70 9c 5a 00 00 00 00 dd 6b 44 0d 00 00 00 01 |.p.Z.....kD.....|
567 $ hg bundle -q --all bu.hg 610 0010: 88 1f e2 b9 00 00 00 01 ac 22 03 33 00 00 00 02 |.........".3....|
568 $ hg --config extensions.strip= strip --no-b -qr -1: 611 0020: ae e3 9c d1 00 00 00 02 d8 cb c6 1d 00 00 00 01 |................|
569 $ hg up -q tip 612 0030: 58 97 36 a2 00 00 00 03 10 ff 58 95 00 00 00 04 |X.6.......X.....|
570 $ hg branch 613 0040: ee bb 94 44 00 00 00 02 5f 40 61 bb 00 00 00 02 |...D...._@a.....|
571 b 614 0050: bf be 84 1b 00 00 00 02 d3 f1 63 45 80 00 00 02 |..........cE....|
572 $ hg branch -q hacked 615 0060: e3 d4 9c 05 80 00 00 02 e2 3b 55 05 00 00 00 02 |.........;U.....|
573 $ hg ci --amend -qm 'hacked' 616 0070: f8 94 c2 56 80 00 00 03 |...V....|
574 $ hg pull -q bu.hg -r f894c25619d3 617 cache is updated/truncated when stripping - it is thus very hard to get in a
575 $ hg log -r tip+b -T'{rev}:{node|short} {branch}\n' 618 situation where the cache is out of sync and the hash check detects it
576 14:f894c25619d3 c 619 $ hg --config extensions.strip= strip -r tip --nob
577 12:e3d49c0575d8 b 620 $ f --size .hg/cache/rbc-revs*
578 $ hg debugrevspec 'branch("hacked")' 621 .hg/cache/rbc-revs-v1: size=112
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)
597 622
598 $ cd .. 623 $ cd ..