p5550: factor out nonsense-pack creation

We have a function to create a bunch of irrelevant packs to
measure the expense of reprepare_packed_git(). Let's make
that available to other perf scripts.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2017-11-20 15:26:43 -05:00 committed by Junio C Hamano
parent fc849d8d6b
commit aa338d3508
2 changed files with 31 additions and 23 deletions

29
t/perf/lib-pack.sh Normal file
View file

@ -0,0 +1,29 @@
# Helpers for dealing with large numbers of packs.
# create $1 nonsense packs, each with a single blob
create_packs () {
perl -le '
my ($n) = @ARGV;
for (1..$n) {
print "blob";
print "data <<EOF";
print "$_";
print "EOF";
}
' "$@" |
git fast-import &&
git cat-file --batch-all-objects --batch-check='%(objectname)' |
while read sha1
do
echo $sha1 | git pack-objects .git/objects/pack/pack
done
}
# create a large number of packs, disabling any gc which might
# cause us to repack them
setup_many_packs () {
git config gc.auto 0 &&
git config gc.autopacklimit 0 &&
create_packs 500
}

View file

@ -20,6 +20,7 @@ start to show a noticeable performance problem on my machine, but without
taking too long to set up and run the tests.
'
. ./perf-lib.sh
. "$TEST_DIRECTORY/perf/lib-pack.sh"
# make a long nonsense history on branch $1, consisting of $2 commits, each
# with a unique file pointing to the blob at $2.
@ -44,26 +45,6 @@ create_tags () {
git update-ref --stdin
}
# create $1 nonsense packs, each with a single blob
create_packs () {
perl -le '
my ($n) = @ARGV;
for (1..$n) {
print "blob";
print "data <<EOF";
print "$_";
print "EOF";
}
' "$@" |
git fast-import &&
git cat-file --batch-all-objects --batch-check='%(objectname)' |
while read sha1
do
echo $sha1 | git pack-objects .git/objects/pack/pack
done
}
test_expect_success 'create parent and child' '
git init parent &&
git -C parent commit --allow-empty -m base &&
@ -84,9 +65,7 @@ test_expect_success 'populate parent tags' '
test_expect_success 'create child packs' '
(
cd child &&
git config gc.auto 0 &&
git config gc.autopacklimit 0 &&
create_packs 500
setup_many_packs
)
'