On 04/17, [email protected] wrote:
> From: Jeff Hostetler <[email protected]>
>
> Created t/perf/repos/many-files.sh to generate large, but
> artificial repositories.
>
> Created t/perf/p0006-read-tree-checkout.sh to measure
> performance on various read-tree, checkout, and update-index
> operations. This test can run using either artificial repos
> described above or normal repos.
>
> Signed-off-by: Jeff Hostetler <[email protected]>
> ---
> t/perf/p0006-read-tree-checkout.sh | 67 ++++++++++++++++++++++
> t/perf/repos/.gitignore | 1 +
> t/perf/repos/many-files.sh | 110
> +++++++++++++++++++++++++++++++++++++
> 3 files changed, 178 insertions(+)
> create mode 100755 t/perf/p0006-read-tree-checkout.sh
> create mode 100644 t/perf/repos/.gitignore
> create mode 100755 t/perf/repos/many-files.sh
>
> diff --git a/t/perf/p0006-read-tree-checkout.sh
> b/t/perf/p0006-read-tree-checkout.sh
> new file mode 100755
> index 0000000..78cc23f
> --- /dev/null
> +++ b/t/perf/p0006-read-tree-checkout.sh
> @@ -0,0 +1,67 @@
> +#!/bin/sh
> +#
> +# This test measures the performance of various read-tree
> +# and checkout operations. It is primarily interested in
> +# the algorithmic costs of index operations and recursive
> +# tree traversal -- and NOT disk I/O on thousands of files.
> +
> +test_description="Tests performance of read-tree"
> +
> +. ./perf-lib.sh
> +
> +test_perf_default_repo
I like that it's possible to use a real world repository now instead
of forcing the use of a synthetic repository :)
Is there a reason for this being test_perf_default_repo instead of
test_perf_large_repo? It seems like generating a large repo is what
you are doing with repos/many-files.sh.
> +
> +# If the test repo was generated by ./repos/many-files.sh
> +# then we know something about the data shape and branches,
> +# so we can isolate testing to the ballast-related commits
> +# and setup sparse-checkout so we don't have to populate
> +# the ballast files and directories.
> +#
> +# Otherwise, we make some general assumptions about the
> +# repo and consider the entire history of the current
> +# branch to be the ballast.
> +
> +test_expect_success "setup repo" '
> + if git rev-parse --verify refs/heads/p0006-ballast^{commit}
> + then
> + echo Assuming synthetic repo from many-files.sh
> + git branch br_base master
> + git branch br_ballast p0006-ballast^
> + git branch br_ballast_alias p0006-ballast^
> + git branch br_ballast_plus_1 p0006-ballast
> + git config --local core.sparsecheckout 1
> + cat >.git/info/sparse-checkout <<-EOF
> + /*
> + !ballast/*
> + EOF
> + else
> + echo Assuming non-synthetic repo...
> + git branch br_base $(git rev-list HEAD | tail -n 1)
> + git branch br_ballast HEAD^ || error "no ancestor
> commit from current head"
> + git branch br_ballast_alias HEAD^
> + git branch br_ballast_plus_1 HEAD
> + fi &&
> + git checkout -q br_ballast &&
> + nr_files=$(git ls-files | wc -l)
> +'
> +
> +test_perf "read-tree br_base br_ballast ($nr_files)" '
> + git read-tree -m br_base br_ballast -n
> +'
> +
> +test_perf "switch between br_base br_ballast ($nr_files)" '
> + git checkout -q br_base &&
> + git checkout -q br_ballast
> +'
> +
> +test_perf "switch between br_ballast br_ballast_plus_1 ($nr_files)" '
> + git checkout -q br_ballast_plus_1 &&
> + git checkout -q br_ballast
> +'
> +
> +test_perf "switch between aliases ($nr_files)" '
> + git checkout -q br_ballast_alias &&
> + git checkout -q br_ballast
> +'
> +
> +test_done
> diff --git a/t/perf/repos/.gitignore b/t/perf/repos/.gitignore
> new file mode 100644
> index 0000000..72e3dc3
> --- /dev/null
> +++ b/t/perf/repos/.gitignore
> @@ -0,0 +1 @@
> +gen-*/
> diff --git a/t/perf/repos/many-files.sh b/t/perf/repos/many-files.sh
> new file mode 100755
> index 0000000..5a1d25e
> --- /dev/null
> +++ b/t/perf/repos/many-files.sh
> @@ -0,0 +1,110 @@
> +#!/bin/sh
> +## Generate test data repository using the given parameters.
> +## When omitted, we create "gen-many-files-d-w-f.git".
> +##
> +## Usage: [-r repo] [-d depth] [-w width] [-f files]
> +##
> +## -r repo: path to the new repo to be generated
> +## -d depth: the depth of sub-directories
> +## -w width: the number of sub-directories at each level
> +## -f files: the number of files created in each directory
> +##
> +## Note that all files will have the same SHA-1 and each
> +## directory at a level will have the same SHA-1, so we
> +## will potentially have a large index, but not a large
> +## ODB.
> +##
> +## Ballast will be created under "ballast/".
I think comments should start only with a single '#' in the git
source, as you already have it in p0006.
[...]