Re: [PATCH v3 24/34] t/perf/p7519: speed up test using "test-tool touch"
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Jul 1, 2021, 23:09 UTC
- Message-ID
- <87h7hdbpgb.fsf@evledraar.gmail.com>
- In-Reply-To
- <f1ef9656fc3adf079c8e40a74baeb5356bcf1586.1625150864.git.gitgitgadget@gmail.com>
On Thu, Jul 01 2021, Jeff Hostetler via GitGitGadget wrote:
Show 50 quoted lines
> From: Jeff Hostetler <jeffhost@microsoft.com>
>
> Change p7519 to use a single "test-tool touch" command to update
> the mtime on a series of (thousands) files instead of invoking
> thousands of commands to update a single file.
>
> This is primarily for Windows where process creation is so
> very slow and reduces the test run time by minutes.
>
> Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
> ---
> t/perf/p7519-fsmonitor.sh | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/t/perf/p7519-fsmonitor.sh b/t/perf/p7519-fsmonitor.sh
> index 5eb5044a103..f74e6014a0a 100755
> --- a/t/perf/p7519-fsmonitor.sh
> +++ b/t/perf/p7519-fsmonitor.sh
> @@ -119,10 +119,11 @@ test_expect_success "one time repo setup" '
> fi &&
>
> mkdir 1_file 10_files 100_files 1000_files 10000_files &&
> - for i in $(test_seq 1 10); do touch 10_files/$i; done &&
> - for i in $(test_seq 1 100); do touch 100_files/$i; done &&
> - for i in $(test_seq 1 1000); do touch 1000_files/$i; done &&
> - for i in $(test_seq 1 10000); do touch 10000_files/$i; done &&
> + test-tool touch sequence --pattern="10_files/%d" --start=1 --count=10 &&
> + test-tool touch sequence --pattern="100_files/%d" --start=1 --count=100 &&
> + test-tool touch sequence --pattern="1000_files/%d" --start=1 --count=1000 &&
> + test-tool touch sequence --pattern="10000_files/%d" --start=1 --count=10000 &&
> +
> git add 1_file 10_files 100_files 1000_files 10000_files &&
> git commit -qm "Add files" &&
>
> @@ -200,15 +201,12 @@ test_fsmonitor_suite() {
> # Update the mtimes on upto 100k files to make status think
> # that they are dirty. For simplicity, omit any files with
> # LFs (i.e. anything that ls-files thinks it needs to dquote).
> - # Then fully backslash-quote the paths to capture any
> - # whitespace so that they pass thru xargs properly.
> #
> test_perf_w_drop_caches "status (dirty) ($DESC)" '
> git ls-files | \
> head -100000 | \
> grep -v \" | \
> - sed '\''s/\(.\)/\\\1/g'\'' | \
> - xargs test-tool chmtime -300 &&
> + test-tool touch stdin &&
> git status
> 'Did you try to replace this with some variant of:
test_seq 1 10000 | xargs touch
Which (depending on your xargs version) would invoke "touch" commands with however many argv items it thinks you can handle.