diff options
author | John Keeping <john@keeping.me.uk> | 2015-09-05 14:12:49 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-09-08 10:35:05 -0700 |
commit | 0968f12a99c4ac784b6b7f858003662cfaae117f (patch) | |
tree | e7ef01837bbd052b6b5216627ed82371c814e9b0 | |
parent | t7800: don't use test_config in a subshell (diff) | |
download | tgif-0968f12a99c4ac784b6b7f858003662cfaae117f.tar.xz |
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>
-rw-r--r-- | t/test-lib-functions.sh | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 0e80f377ce..6dffb8bcde 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -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" } |