perf: add performance test for pickaxe

Add a test for the -G and -S pickaxe options and related options. This test supports being run with GIT_TEST_LONG=1 to adjust the limit on the number of commits from 1k to 10k. The 1k limit seems to hit a good spot on git.git Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ævar Arnfjörð Bjarmason committed Apr 12, 2021 at 19:15 UTC d90d441c336cc120b47e025d14c3879864ce60c5
1 file changed +70
t/perf/p4209-pickaxe.sh new
+70
@@ -0,0 +1,70 @@
1 +#!/bin/sh
2 +
3 +test_description="Test pickaxe performance"
4 +
5 +. ./perf-lib.sh
6 +
7 +test_perf_default_repo
8 +
9 +# Not --max-count, as that's the number of matching commit, so it's
10 +# unbounded. We want to limit our revision walk here.
11 +from_rev_desc=
12 +from_rev=
13 +max_count=1000
14 +if test_have_prereq EXPENSIVE
15 +then
16 + max_count=10000
17 +fi
18 +from_rev=" $(git rev-list HEAD | head -n $max_count | tail -n 1).."
19 +from_rev_desc=" <limit-rev>.."
20 +
21 +for icase in \
22 + '' \
23 + '-i '
24 +do
25 + # -S (no regex)
26 + for pattern in \
27 + 'int main' \
28 + 'æ'
29 + do
30 + for opts in \
31 + '-S'
32 + do
33 + test_perf "git log $icase$opts'$pattern'$from_rev_desc" "
34 + git log --pretty=format:%H $icase$opts'$pattern'$from_rev
35 + "
36 + done
37 + done
38 +
39 + # -S (regex)
40 + for pattern in \
41 + '(int|void|null)' \
42 + 'if *\([^ ]+ & ' \
43 + '[àáâãäåæñøùúûüýþ]'
44 + do
45 + for opts in \
46 + '--pickaxe-regex -S'
47 + do
48 + test_perf "git log $icase$opts'$pattern'$from_rev_desc" "
49 + git log --pretty=format:%H $icase$opts'$pattern'$from_rev
50 + "
51 + done
52 + done
53 +
54 + # -G
55 + for pattern in \
56 + '(int|void|null)' \
57 + 'if *\([^ ]+ & ' \
58 + '[àáâãäåæñøùúûüýþ]'
59 + do
60 + for opts in \
61 + '-G'
62 + do
63 + test_perf "git log $icase$opts'$pattern'$from_rev_desc" "
64 + git log --pretty=format:%H $icase$opts'$pattern'$from_rev
65 + "
66 + done
67 + done
68 +done
69 +
70 +test_done