t7502-commit.sh: test_must_fail doesn't work with inline environment variables
authorBrandon Casey <casey@nrlssc.navy.mil>
Thu, 19 Jun 2008 17:32:02 +0000 (12:32 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 19 Jun 2008 23:07:06 +0000 (16:07 -0700)
commite2007832552ccea9befed9003580c494f09e666e
treeec42e7cad6e4ba8f351628c737533fb3be633cee
parent20827d99c5ee079d92831474a0b6e66b79757dbd
t7502-commit.sh: test_must_fail doesn't work with inline environment variables

When the arguments to test_must_fail() begin with a variable assignment,
test_must_fail() attempts to execute the variable assignment as a command.
This fails, and so test_must_fail returns with a successful status value
without running the command it was intended to test.

For example, the following script:

#!/bin/sh
test_must_fail () {
"$@"
test $? -gt 0 -a $? -le 129
}
foo='wo adrian'
test_must_fail foo='yo adrian' sh -c 'echo foo: $foo'

always exits zero and prints the message:

test.sh: line 3: foo=yo adrian: command not found

Test 16 calls test_must_fail in such a way and therefore has not been
testing whether git 'do[es] not fire editor in the presence of conflicts'.

A workaround is to set and export the variable in a normal way, not
using one-shot notation.  Because this would affect the remainder of
the process, the test is done inside a subshell.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7502-commit.sh