Re: [PATCH] tests: Introduce test_seq
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 3, 2012, 22:48 UTC
- Message-ID
- <7vr4rna8y4.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1344032464-14104-1-git-send-email-michal.kiedrowicz@gmail.com>
Michał Kiedrowicz <michal.kiedrowicz@gmail.com> writes:
Show 26 quoted lines
> Jeff King wrote: > > The seq command is GNU-ism, and is missing at least in older BSD > releases and their derivatives, not to mention antique > commercial Unixes. > > We already purged it in b3431bc (Don't use seq in tests, not > everyone has it, 2007-05-02), but a few new instances have crept > in. They went unnoticed because they are in scripts that are not > run by default. > > Replace them with test_seq that is implemented with a Perl snippet > (proposed by Jeff). This is better than inlining this snippet > everywhere it's needed because it's easier to read and it's easier to > change the implementation (e.g. to C) if we ever decide to remove Perl > from the test suite. > > Note that test_seq is not a complete replacement for seq(1). It just > has what we need now. > > There are also many places that do `for i in 1 2 3 ...` but I'm not sure > if it's worth converting them to test_seq. That would introduce running > more processes of Perl. > > Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com> > ---
Thanks; Jeff, ack?
I have one minor nit that I am tempted to fix while queuing---see below.
Show 63 quoted lines
> Changes since previous version:
>
> * Removed "This commit replaces" from commit message
> * Reworded test_seq description
> * Now $first and $last are passed to Perl as arguments
>
> t/perf/perf-lib.sh | 2 +-
> t/t5551-http-fetch.sh | 2 +-
> t/test-lib-functions.sh | 20 ++++++++++++++++++++
> 3 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh
> index 5580c22..a1361e5 100644
> --- a/t/perf/perf-lib.sh
> +++ b/t/perf/perf-lib.sh
> @@ -163,7 +163,7 @@ test_perf () {
> else
> echo "perf $test_count - $1:"
> fi
> - for i in $(seq 1 $GIT_PERF_REPEAT_COUNT); do
> + for i in $(test_seq 1 $GIT_PERF_REPEAT_COUNT); do
> say >&3 "running: $2"
> if test_run_perf_ "$2"
> then
> diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch.sh
> index fadf2f2..91eaf53 100755
> --- a/t/t5551-http-fetch.sh
> +++ b/t/t5551-http-fetch.sh
> @@ -114,7 +114,7 @@ test -n "$GIT_TEST_LONG" && test_set_prereq EXPENSIVE
> test_expect_success EXPENSIVE 'create 50,000 tags in the repo' '
> (
> cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
> - for i in `seq 50000`
> + for i in `test_seq 50000`
> do
> echo "commit refs/heads/too-many-refs"
> echo "mark :$i"
> diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
> index 80daaca..c8b4ae3 100644
> --- a/t/test-lib-functions.sh
> +++ b/t/test-lib-functions.sh
> @@ -530,6 +530,26 @@ test_cmp() {
> $GIT_TEST_CMP "$@"
> }
>
> +# Print a sequence of numbers or letters in increasing order. This is
> +# similar to GNU seq(1), but the latter might not be available
> +# everywhere. It may be used like:
> +#
> +# for i in `test_seq 100`; do
> +# for j in `test_seq 10 20`; do
> +# for k in `test_seq a z`; do
> +# echo $i-$j-$k
> +# done
> +# done
> +# done
> +
> +test_seq () {
> + test $# = 2 && { first=$1; shift; } || first=1
> + test $# = 1 ||
> + error "bug in the test script: not 1 or 2 parameters to test_seq"
> + last=$1
> + "$PERL_PATH" -le 'print for "$ARGV[0]".."$ARGV[1]"' "$first" "$last"I'd prefer not to have dq around $ARGV[]; is there a reason to have one around these?
Show 5 quoted lines
> +} > + > # This function can be used to schedule some commands to be run > # unconditionally at the end of the test to restore sanity: > #