summaryrefslogtreecommitdiff
path: root/t/test-lib-functions.sh
diff options
context:
space:
mode:
authorJohn Keeping <john@keeping.me.uk>2015-09-05 13:12:49 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-09-08 17:35:05 (GMT)
commit0968f12a99c4ac784b6b7f858003662cfaae117f (patch)
treee7ef01837bbd052b6b5216627ed82371c814e9b0 /t/test-lib-functions.sh
parentda568b66f1b481998bee3a2569739ca1302fd65c (diff)
downloadgit-0968f12a99c4ac784b6b7f858003662cfaae117f.zip
git-0968f12a99c4ac784b6b7f858003662cfaae117f.tar.gz
git-0968f12a99c4ac784b6b7f858003662cfaae117f.tar.bz2
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>
Diffstat (limited to 't/test-lib-functions.sh')
-rw-r--r--t/test-lib-functions.sh5
1 files changed, 5 insertions, 0 deletions
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 0e80f37..6dffb8b 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"
}