From: Junio C Hamano Date: Tue, 08 Jan 2013 20:39:42 GMT Subject: Re: [PATCH] t1402: work around shell quoting issue on NetBSD Message-ID: <7vr4lvcstt.fsf@alter.siamese.dyndns.org> In-Reply-To: <50EC8025.8000707@lsrfire.ath.cx> René Scharfe writes: > The test fails for me on NetBSD 6.0.1 and reports: > > ok 1 - ref name '' is invalid > ok 2 - ref name '/' is invalid > ok 3 - ref name '/' is invalid with options --allow-onelevel > ok 4 - ref name '/' is invalid with options --normalize > error: bug in the test script: not 2 or 3 parameters to test-expect-success > > The alleged bug is in this line: > > invalid_ref NOT_MINGW '/' '--allow-onelevel --normalize' > > invalid_ref() constructs a test case description using its last argument, > but the shell seems to split it up into two pieces if it contains a > space. Minimal test case: > > # on NetBSD with /bin/sh > $ a() { echo $#-$1-$2; } > $ t="x"; a "${t:+$t}" > 1-x- > $ t="x y"; a "${t:+$t}" > 2-x-y > $ t="x y"; a "${t:+x y}" > 1-x y- > > # and with bash > $ t="x y"; a "${t:+$t}" > 1-x y- > $ t="x y"; a "${t:+x y}" > 1-x y- > > This may be a bug in the shell, but here's a simple workaround: Construct > the description string first and store it in a variable, and then use > that to call test_expect_success(). Interesting. I notice that t0008 added recently to 'pu' has the same construct. > > Signed-off-by: Rene Scharfe > --- > t/t1402-check-ref-format.sh | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/t/t1402-check-ref-format.sh b/t/t1402-check-ref-format.sh > index 1ae4d87..1a5a5f3 100755 > --- a/t/t1402-check-ref-format.sh > +++ b/t/t1402-check-ref-format.sh > @@ -11,7 +11,8 @@ valid_ref() { > prereq=$1 > shift > esac > - test_expect_success $prereq "ref name '$1' is valid${2:+ with options $2}" " > + desc="ref name '$1' is valid${2:+ with options $2}" > + test_expect_success $prereq "$desc" " > git check-ref-format $2 '$1' > " > } > @@ -22,7 +23,8 @@ invalid_ref() { > prereq=$1 > shift > esac > - test_expect_success $prereq "ref name '$1' is invalid${2:+ with options $2}" " > + desc="ref name '$1' is invalid${2:+ with options $2}" > + test_expect_success $prereq "$desc" " > test_must_fail git check-ref-format $2 '$1' > " > }