Anonymous committed e200783 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:

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: 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 <>
Signed-off-by: Junio C Hamano <>

  • Participants
  • Parent commits 20827d9

Comments (0)

Files changed (1)


 	# Must fail due to conflict
 	test_must_fail git cherry-pick -n master &&
 	echo "editor not started" >.git/result &&
-	test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
+	(
+		GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" &&
+		export GIT_EDITOR &&
+		test_must_fail git commit
+	) &&
 	test "$(cat .git/result)" = "editor not started"