git-commit-vandalism/t/perf/p0100-globbing.sh
Eric Sunshine db5875aa9f t0000-t3999: detect and signal failure within loop
Failures within `for` and `while` loops can go unnoticed if not detected
and signaled manually since the loop itself does not abort when a
contained command fails, nor will a failure necessarily be detected when
the loop finishes since the loop returns the exit code of the last
command it ran on the final iteration, which may not be the command
which failed. Therefore, detect and signal failures manually within
loops using the idiom `|| return 1` (or `|| exit 1` within subshells).

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-12-13 10:29:48 -08:00

44 lines
892 B
Bash
Executable File

#!/bin/sh
test_description="Tests pathological globbing performance
Shows how Git's globbing performance performs when given the sort of
pathological patterns described in at https://research.swtch.com/glob
"
. ./perf-lib.sh
test_globs_big='10 25 50 75 100'
test_globs_small='1 2 3 4 5 6'
test_perf_fresh_repo
test_expect_success 'setup' '
for i in $(test_seq 1 100)
do
printf "a" >>refname &&
for j in $(test_seq 1 $i)
do
printf "a*" >>refglob.$i || return 1
done &&
echo b >>refglob.$i || return 1
done &&
test_commit test $(cat refname).t "" $(cat refname).t
'
for i in $test_globs_small
do
test_perf "refglob((a*)^nb) against tag (a^100).t; n = $i" '
git for-each-ref "refs/tags/$(cat refglob.'$i')b"
'
done
for i in $test_globs_small
do
test_perf "fileglob((a*)^nb) against file (a^100).t; n = $i" '
git ls-files "$(cat refglob.'$i')b"
'
done
test_done