|
| 1 | +#!/bin/sh |
| 2 | + |
| 3 | +test_description='Tests pack performance using bitmaps' |
| 4 | +. ./perf-lib.sh |
| 5 | + |
| 6 | +test_perf_large_repo |
| 7 | + |
| 8 | +# note that we do everything through config, |
| 9 | +# since we want to be able to compare bitmap-aware |
| 10 | +# git versus non-bitmap git |
| 11 | +test_expect_success 'setup bitmap config' ' |
| 12 | + git config pack.writebitmaps true |
| 13 | +' |
| 14 | + |
| 15 | +test_perf 'repack to disk' ' |
| 16 | + git repack -ad |
| 17 | +' |
| 18 | + |
| 19 | +test_perf 'simulated clone' ' |
| 20 | + git pack-objects --stdout --all </dev/null >/dev/null |
| 21 | +' |
| 22 | + |
| 23 | +test_perf 'simulated fetch' ' |
| 24 | + have=$(git rev-list HEAD~100 -1) && |
| 25 | + { |
| 26 | + echo HEAD && |
| 27 | + echo ^$have |
| 28 | + } | git pack-objects --revs --stdout >/dev/null |
| 29 | +' |
| 30 | + |
| 31 | +test_expect_success 'create partial bitmap state' ' |
| 32 | + # pick a commit to represent the repo tip in the past |
| 33 | + cutoff=$(git rev-list HEAD~100 -1) && |
| 34 | + orig_tip=$(git rev-parse HEAD) && |
| 35 | +
|
| 36 | + # now kill off all of the refs and pretend we had |
| 37 | + # just the one tip |
| 38 | + rm -rf .git/logs .git/refs/* .git/packed-refs |
| 39 | + git update-ref HEAD $cutoff |
| 40 | +
|
| 41 | + # and then repack, which will leave us with a nice |
| 42 | + # big bitmap pack of the "old" history, and all of |
| 43 | + # the new history will be loose, as if it had been pushed |
| 44 | + # up incrementally and exploded via unpack-objects |
| 45 | + git repack -Ad |
| 46 | +
|
| 47 | + # and now restore our original tip, as if the pushes |
| 48 | + # had happened |
| 49 | + git update-ref HEAD $orig_tip |
| 50 | +' |
| 51 | + |
| 52 | +test_perf 'partial bitmap' ' |
| 53 | + git pack-objects --stdout --all </dev/null >/dev/null |
| 54 | +' |
| 55 | + |
| 56 | +test_done |
0 commit comments