t3311: use test_commit_bulk
authorJeff King <peff@peff.net>
Fri, 28 Jun 2019 09:41:35 +0000 (05:41 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 2 Jul 2019 17:11:54 +0000 (10:11 -0700)
One of the tests in t3311 creates 300 commits by running "test_commit"
in a loop. This requires 900 processes. Instead, we can use
test_commit_bulk to do it with only four. This improves the runtime of
the script from:

Benchmark #1: ./t3311-notes-merge-fanout.sh --root=/var/ram/git-tests
Time (mean ± σ): 5.821 s ± 0.691 s [User: 3.146 s, System: 2.782 s]
Range (min … max): 4.783 s … 6.841 s 10 runs

to:

Benchmark #1: ./t3311-notes-merge-fanout.sh --root=/var/ram/git-tests
Time (mean ± σ): 1.743 s ± 0.116 s [User: 1.144 s, System: 0.691 s]
Range (min … max): 1.629 s … 1.994 s 10 runs

for an average speedup of over 70%.

Unfortunately we still have to run 300 instances of "git notes add",
since the point is to test the fanout that comes from adding notes one
by one.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3311-notes-merge-fanout.sh
index 93516ef67ce0b6efb0cd111422ac356b40140257..37151a3adc3971b8bc0e83ae1c762aa2bc91001e 100755 (executable)
@@ -114,12 +114,12 @@ cp expect_log_x expect_log_y
 test_expect_success 'Add a few hundred commits w/notes to trigger fanout (x -> y)' '
        git update-ref refs/notes/y refs/notes/x &&
        git config core.notesRef refs/notes/y &&
-       i=5 &&
-       while test $i -lt $num
+       test_commit_bulk --start=6 --id=commit $((num - 5)) &&
+       i=0 &&
+       while test $i -lt $((num - 5))
        do
-               i=$(($i + 1)) &&
-               test_commit "commit$i" >/dev/null &&
-               git notes add -m "notes for commit$i" || return 1
+               git notes add -m "notes for commit$i" HEAD~$i || return 1
+               i=$((i + 1))
        done &&
        test "$(git rev-parse refs/notes/y)" != "$(git rev-parse refs/notes/x)" &&
        # Expected number of commits and notes