The test_atexit unit test relies on the specific location of the generated files. When TEST_OUTPUT_DIRECTORY is unset, _run_sub_test_lib_test_common sets it to pwd, which is two levels under the pwd of the parent unit test, and the parent can find the generated files just fine. But when TEST_OUTPUT_DIRECTORY is set, it's stored in GIT-BUILD-OPTIONS, and even though _run_sub_test_lib_test_common correctly overrides it, when the child script is run, it sources GIT-BUILD-OPTIONS, and TEST_OUTPUT_DIRECTORY is overridden. Effectively both the parent and child scripts output to the same directory. make TEST_OUTPUT_DIRECTORY=/tmp/foobar GIT-BUILD-OPTIONS && make -C t t0000-basic.sh We could simply revert 2d14e13c56 (test output: respect $TEST_OUTPUT_DIRECTORY, 2013-04-29), but presumably it was done for some reason. On the other hand we could follow the alternate path suggested in 6883047071 (t0000: set TEST_OUTPUT_DIRECTORY for sub-tests, 2013-12-28): pass the --root parameter to the child scripts. The alternate solution works, so let's do that instead. Presumably this was broken since 900721e15c (test-lib: introduce 'test_atexit', 2019-03-13). Cc: John Keeping <john@xxxxxxxxxxxxx> Cc: Jeff King <peff@xxxxxxxx> Cc: Johannes Schindelin <Johannes.Schindelin@xxxxxx> Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- t/t0000-basic.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh index 705d62cc27..16b70ef940 100755 --- a/t/t0000-basic.sh +++ b/t/t0000-basic.sh @@ -93,14 +93,12 @@ _run_sub_test_lib_test_common () { EOF cat >>"$name.sh" && export TEST_DIRECTORY && - TEST_OUTPUT_DIRECTORY=$(pwd) && - export TEST_OUTPUT_DIRECTORY && sane_unset GIT_TEST_FAIL_PREREQS && if test -z "$neg" then - ./"$name.sh" "$@" >out 2>err + ./"$name.sh" --root="$(pwd)" "$@" >out 2>err else - ! ./"$name.sh" "$@" >out 2>err + ! ./"$name.sh" --root="$(pwd)" "$@" >out 2>err fi ) } -- 2.32.0.2.g41be0a4e50