test-lib-functions: detect test_when_finished in subshell

test_when_finished does nothing in a subshell because the change to test_cleanup does not affect the parent. There is no POSIX way to detect that we are in a subshell ($$ and $PPID are specified to remain unchanged), but we can detect it on Bash and fall back to ignoring the bug on other shells. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>

John Keeping committed Sep 5, 2015 at 14:12 UTC 0968f12a99c4ac784b6b7f858003662cfaae117f
1 file changed +5
t/test-lib-functions.sh
+5
@@ -736,6 +736,11 @@ test_seq () {
736 # what went wrong.
737
738 test_when_finished () {
739 + # We cannot detect when we are in a subshell in general, but by
740 + # doing so on Bash is better than nothing (the test will
741 + # silently pass on other shells).
742 + test "${BASH_SUBSHELL-0}" = 0 ||
743 + error "bug in test script: test_when_finished does nothing in a subshell"
744 test_cleanup="{ $*
745 } && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup"
746 }