Re: [PATCH] t3900: add some more quotes
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 10, 2018, 21:31 UTC
- Message-ID
- <xmqqy3l5z9hx.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <20180110195323.GA26186@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 26 quoted lines
> Yeah. One of the reasons for both of the errors in this thread is the
> nested double-quoting. Using single quotes is awkward because we're
> already using them to delimit the whole snippet. I've often wondered if
> our tests would be more readable taking the snippet over stdin.
> Something like:
> +test_expect_success 'UTF-8 invalid characters refused' - <<\EOT
> + test_when_finished 'rm -f "$HOME/stderr $HOME/invalid"' &&
> ...
> -'
> +EOT
>
> +# Read from stdin into the variable given in $1.
> +test_read_to_eof () {
> + # Bash's "read" is sufficiently flexible that we can skip the extra
> + # process.
> + if test -n "$BASH_VERSION"
> + then
> + # 64k should be enough for anyone...
> + read -N 65536 -r "$1"
> + else
> + # command substitution eats trailing whitespace, so we add
> + # and then remove a non-whitespace character.
> + eval "$1=\$(cat; printf x)"
> + eval "$1=\${$1%x}"
> + fi
> +}Yuck. Hacky but nice.
I think this will make it easier to read but I suspect here text would use temporary files and may slow things down a bit? I do not know if it is even measurable, though.
Show 26 quoted lines
> +
> test_expect_failure () {
> test_start_
> test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
> test "$#" = 2 ||
> error "bug in the test script: not 2 or 3 parameters to test-expect-failure"
> + if test "$2" = "-"
> + then
> + test_read_to_eof test_block
> + set -- "$1" "$test_block"
> + fi
> test_verify_prereq
> export test_prereq
> if ! test_skip "$@"
> @@ -416,6 +437,11 @@ test_expect_success () {
> test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
> test "$#" = 2 ||
> error "bug in the test script: not 2 or 3 parameters to test-expect-success"
> + if test "$2" = "-"
> + then
> + test_read_to_eof test_block
> + set -- "$1" "$test_block"
> + fi
> test_verify_prereq
> export test_prereq
> if ! test_skip "$@"