p1400: use git-update-ref --stdin to test multiple transactions

In commit 0a0fbbe3ff (refs: remove lookup cache for
reference-transaction hook, 2020-08-25), a new benchmark was added to
p1400 which has the intention to exercise creation of multiple
transactions in a single process. As git-update-ref wasn't yet able to
create multiple transactions with a single run we instead used git-push.
As its non-atomic version creates a transaction per reference update,
this was the best approximation we could make at that point in time.

Now that `git-update-ref --stdin` supports creation of multiple
transactions, let's convert the benchmark to use that instead. It has
less overhead and it's also a lot clearer what the actual intention is.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2020-11-13 09:12:41 +01:00 committed by Junio C Hamano
parent 262a4d28fe
commit 21020430a4

View file

@ -7,13 +7,14 @@ test_description="Tests performance of update-ref"
test_perf_fresh_repo
test_expect_success "setup" '
git init --bare target-repo.git &&
test_commit PRE &&
test_commit POST &&
printf "create refs/heads/%d PRE\n" $(test_seq 1000) >create &&
printf "update refs/heads/%d POST PRE\n" $(test_seq 1000) >update &&
printf "delete refs/heads/%d POST\n" $(test_seq 1000) >delete &&
git update-ref --stdin <create
for i in $(test_seq 5000)
do
printf "start\ncreate refs/heads/%d PRE\ncommit\n" $i &&
printf "start\nupdate refs/heads/%d POST PRE\ncommit\n" $i &&
printf "start\ndelete refs/heads/%d POST\ncommit\n" $i
done >instructions
'
test_perf "update-ref" '
@ -26,14 +27,7 @@ test_perf "update-ref" '
'
test_perf "update-ref --stdin" '
git update-ref --stdin <update &&
git update-ref --stdin <delete &&
git update-ref --stdin <create
'
test_perf "nonatomic push" '
git push ./target-repo.git $(test_seq 1000) &&
git push --delete ./target-repo.git $(test_seq 1000)
git update-ref --stdin <instructions >/dev/null
'
test_done