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>
This commit is contained in:
parent
da568b66f1
commit
0968f12a99
@ -736,6 +736,11 @@ test_seq () {
|
|||||||
# what went wrong.
|
# what went wrong.
|
||||||
|
|
||||||
test_when_finished () {
|
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="{ $*
|
test_cleanup="{ $*
|
||||||
} && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup"
|
} && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user