From: Junio C Hamano Date: Mon, 18 Aug 2008 23:48:51 GMT Subject: Re: [PATCH] test-lib.sh: work around ksh's trap shortcomings Message-ID: <7vbpzplw9o.fsf@gitster.siamese.dyndns.org> In-Reply-To: Brandon Casey writes: > In ksh, if trap is called within a function with 0 or EXIT as its signal, > then the trap will be executed at the time the function returns. This > causes a problem in the test functions since 'trap - exit' is called > within the test_done function Your alias test_done that calls function test_done look ugly and confusing beyond words. Perhaps test_done() can instead set a global variable and die() can notice it instead, like this? I haven't bothered to change the other "trap - exit" but I think you got the idea... diff --git a/t/test-lib.sh b/t/test-lib.sh index 11c0275..010bfda 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -156,10 +156,16 @@ test_count=0 test_fixed=0 test_broken=0 test_success=0 +test_exit_ok=0 die () { - echo >&5 "FATAL: Unexpected exit with code $?" - exit 1 + status=$? + if test 1 != $test_exit_ok + then + echo >&5 "FATAL: Unexpected exit with code $status" + exit 1 + fi + exit $status } trap 'die' exit @@ -415,6 +421,7 @@ test_create_repo () { } test_done () { + test_exit_ok=1 trap - exit test_results_dir="$TEST_DIRECTORY/test-results" mkdir -p "$test_results_dir"