t/perf/p7519: speed up test on Windows

Change p7519 to use `test_seq` and `xargs` rather than a `for` loop
to touch thousands of files.  This takes minutes off of test runs
on Windows because of process creation overhead.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff Hostetler
2022-03-25 18:03:08 +00:00
committed by Junio C Hamano
parent 8aa0209701
commit 86f7433f97

View File

@ -98,6 +98,13 @@ trace_stop () {
fi fi
} }
touch_files () {
n=$1 &&
d="$n"_files &&
(cd $d && test_seq 1 $n | xargs touch )
}
test_expect_success "one time repo setup" ' test_expect_success "one time repo setup" '
# set untrackedCache depending on the environment # set untrackedCache depending on the environment
if test -n "$GIT_PERF_7519_UNTRACKED_CACHE" if test -n "$GIT_PERF_7519_UNTRACKED_CACHE"
@ -119,10 +126,11 @@ test_expect_success "one time repo setup" '
fi && fi &&
mkdir 1_file 10_files 100_files 1000_files 10000_files && mkdir 1_file 10_files 100_files 1000_files 10000_files &&
for i in $(test_seq 1 10); do touch 10_files/$i || return 1; done && : 1_file directory should be left empty &&
for i in $(test_seq 1 100); do touch 100_files/$i || return 1; done && touch_files 10 &&
for i in $(test_seq 1 1000); do touch 1000_files/$i || return 1; done && touch_files 100 &&
for i in $(test_seq 1 10000); do touch 10000_files/$i || return 1; done && touch_files 1000 &&
touch_files 10000 &&
git add 1_file 10_files 100_files 1000_files 10000_files && git add 1_file 10_files 100_files 1000_files 10000_files &&
git commit -qm "Add files" && git commit -qm "Add files" &&
@ -199,15 +207,15 @@ test_fsmonitor_suite () {
# Update the mtimes on upto 100k files to make status think # Update the mtimes on upto 100k files to make status think
# that they are dirty. For simplicity, omit any files with # that they are dirty. For simplicity, omit any files with
# LFs (i.e. anything that ls-files thinks it needs to dquote). # LFs (i.e. anything that ls-files thinks it needs to dquote)
# Then fully backslash-quote the paths to capture any # and any files with whitespace so that they pass thru xargs
# whitespace so that they pass thru xargs properly. # properly.
# #
test_perf_w_drop_caches "status (dirty) ($DESC)" ' test_perf_w_drop_caches "status (dirty) ($DESC)" '
git ls-files | \ git ls-files | \
head -100000 | \ head -100000 | \
grep -v \" | \ grep -v \" | \
sed '\''s/\(.\)/\\\1/g'\'' | \ grep -v " ." | \
xargs test-tool chmtime -300 && xargs test-tool chmtime -300 &&
git status git status
' '