[PATCH 5/5] test-lib-functions: detect test_when_finished in subshell
- From
John Keeping <john@keeping.me.uk>
- Date
- Sep 5, 2015, 13:12 UTC
- Message-ID
- <59a8583f79c5ac4661f140262e01cd602286f740.1441458341.git.john@keeping.me.uk>
- In-Reply-To
- <cover.1441458341.git.john@keeping.me.uk>
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> --- t/test-lib-functions.sh | 5 +++++ 1 file changed, 5 insertions(+)
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" }
-- 2.5.0.466.g9af26fa