Re: [PATCH 1/6] test-lib: introduce test_commit_bulk
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Jun 28, 2019, 18:44 UTC
- Message-ID
- <87woh57dnt.fsf@evledraar.gmail.com>
- In-Reply-To
- <20190628093911.GA27329@sigill.intra.peff.net>
On Fri, Jun 28 2019, Jeff King wrote:
Show 75 quoted lines
> Some tests need to create a string of commits. Doing this with
> test_commit is very heavy-weight, as it needs at least one process per
> commit (and in fact, uses several).
>
> For bulk creation, we can do much better by using fast-import, but it's
> often a pain to generate the input. Let's provide a helper to do so.
>
> We'll use t5310 as a guinea pig, as it has three 10-commit loops. Here
> are hyperfine results before and after:
>
> [before]
> Benchmark #1: ./t5310-pack-bitmaps.sh --root=/var/ram/git-tests
> Time (mean ± σ): 2.846 s ± 0.305 s [User: 3.042 s, System: 0.919 s]
> Range (min … max): 2.250 s … 3.210 s 10 runs
>
> [after]
> Benchmark #1: ./t5310-pack-bitmaps.sh --root=/var/ram/git-tests
> Time (mean ± σ): 2.210 s ± 0.174 s [User: 2.570 s, System: 0.604 s]
> Range (min … max): 1.999 s … 2.590 s 10 runs
>
> So we're over 20% faster, while making the callers slightly shorter. We
> added a lot more lines in test-lib-function.sh, of course, and the
> helper is way more featureful than we need here. But my hope is that it
> will be flexible enough to use in more places.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> t/t5310-pack-bitmaps.sh | 15 +----
> t/test-lib-functions.sh | 131 ++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 134 insertions(+), 12 deletions(-)
>
> diff --git a/t/t5310-pack-bitmaps.sh b/t/t5310-pack-bitmaps.sh
> index a26c8ba9a2..3aab7024ca 100755
> --- a/t/t5310-pack-bitmaps.sh
> +++ b/t/t5310-pack-bitmaps.sh
> @@ -21,15 +21,9 @@ has_any () {
> }
>
> test_expect_success 'setup repo with moderate-sized history' '
> - for i in $(test_seq 1 10)
> - do
> - test_commit $i
> - done &&
> + test_commit_bulk --id=file 10 &&
> git checkout -b other HEAD~5 &&
> - for i in $(test_seq 1 10)
> - do
> - test_commit side-$i
> - done &&
> + test_commit_bulk --id=side 10 &&
> git checkout master &&
> bitmaptip=$(git rev-parse master) &&
> blob=$(echo tagged-blob | git hash-object -w --stdin) &&
> @@ -106,10 +100,7 @@ test_expect_success 'clone from bitmapped repository' '
> '
>
> test_expect_success 'setup further non-bitmapped commits' '
> - for i in $(test_seq 1 10)
> - do
> - test_commit further-$i
> - done
> + test_commit_bulk --id=further 10
> '
>
> rev_list_tests 'partial bitmap'
> diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
> index 0367cec5fd..32a1db81a3 100644
> --- a/t/test-lib-functions.sh
> +++ b/t/test-lib-functions.sh
> @@ -233,6 +233,137 @@ test_merge () {
> git tag "$1"
> }
>
> +# Similar to test_commit, but efficiently create <nr> commits, each with a
> +# unique number $n (from 1 to <nr> by default) in the commit message.Is it intentional not to follow test_commit's convention of creating a tag as well? If so it would be helpful to note that difference here, or rather, move this documentation to t/README where test_commit and friends are documented.