test-lib-functions: detect test_when_finished in subshell
authorJohn Keeping <john@keeping.me.uk>
Sat, 5 Sep 2015 13:12:49 +0000 (14:12 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 8 Sep 2015 17:35:05 +0000 (10:35 -0700)
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>
t/test-lib-functions.sh
index 0e80f377cec63a74ea357dc881e62b1d66e33d7f..6dffb8bcde83b82fa40b05dd8ee815f4e6a3cdd3 100644 (file)
@@ -736,6 +736,11 @@ test_seq () {
 # what went wrong.
 
 test_when_finished () {
+       # We cannot detect when we are in a subshell in general, but by
+       # doing so on Bash is better than nothing (the test will
+       # silently pass on other shells).
+       test "${BASH_SUBSHELL-0}" = 0 ||
+       error "bug in test script: test_when_finished does nothing in a subshell"
        test_cleanup="{ $*
                } && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup"
 }