Re: [PATCH] Trapping exit in tests, using return for errors
Pavel Roskin [EMAIL PROTECTED] writes: This patch does following: All instances of exit, exit 1 and (exit 1) in tests have been replaced with return 1. In fact, (exit 1) had no effect. Are you sure about all of the above? You are right about ... || exit in the expect_success tests; they are broken. But '(exit 1)' or just saying 'false' at the end should have done the right thing. Worse yet, return does not seem to really work as expected, except if all you want to do was to tell the test driver I failed, in which case bloopl would work just as well. prompt$ cat k.sh what=$1 eval ' echo foo case '$what' in false) (exit 1) ;; exit) exit 1 ;; return) return 1 ;; esac ' echo status $? prompt$ bash k.sh exit foo prompt$ bash k.sh false foo status 1 prompt$ bash k.sh return foo k.sh: line 20: return: can only `return' from a function or sourced script status 1 prompt$ - To unsubscribe from this list: send the line unsubscribe git in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] Trapping exit in tests, using return for errors
Sorry, sent it out without finishing. The worst is return. With ksh, ash, and dash, the script itself exits with status code 1 (presumably you are trapping it with trap -- exit, though). prompt$ bash k.sh exit foo prompt$ bash k.sh false foo status 1 prompt$ bash k.sh return foo k.sh: line 20: return: can only `return' from a function or sourced script status 1 prompt$ ash k.sh exit foo prompt$ ash k.sh false foo status 1 prompt$ ash k.sh return foo prompt$ ksh k.sh exit foo prompt$ ksh k.sh false foo status 1 prompt$ ksh k.sh return foo - To unsubscribe from this list: send the line unsubscribe git in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] Trapping exit in tests, using return for errors
Junio C Hamano [EMAIL PROTECTED] writes: Sorry, sent it out without finishing. The worst is return. Ah, my mistake. You have the eval that can eval return in a function and let that return return from that function. Cleverly done. Thanks. - To unsubscribe from this list: send the line unsubscribe git in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] Trapping exit in tests, using return for errors
Hi, Junio! On Wed, 2005-08-10 at 23:31 -0700, Junio C Hamano wrote: Junio C Hamano [EMAIL PROTECTED] writes: Sorry, sent it out without finishing. The worst is return. Ah, my mistake. You have the eval that can eval return in a function and let that return return from that function. Cleverly done. I'm glad you appreciate it. One more fix on top of the last patch is needed. return from a test would leave the exit trap set, which could cause a spurious error message if it's the last test in the script or --immediate is used. The easiest solution would be to have a global trap that is set when test-lib.sh is sourced and unset either by test_done(), error() or by test_failure_() with --immediate. This patch also depends on the patch that adds test_done() the the scripts that don't have it. Signed-off-by: Pavel Roskin [EMAIL PROTECTED] diff --git a/t/test-lib.sh b/t/test-lib.sh --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -36,6 +36,7 @@ unset SHA1_FILE_DIRECTORY error () { echo * error: $* + trap - exit exit 1 } @@ -74,6 +75,8 @@ fi test_failure=0 test_count=0 +trap 'echo 5 FATAL: Unexpected exit with code $?; exit 1' exit + # You are not expected to call test_ok_ and test_failure_ directly, use # the text_expect_* functions instead. @@ -89,7 +92,7 @@ test_failure_ () { say FAIL $test_count: $1 shift echo $@ | sed -e 's/^//' - test $immediate == || exit 1 + test $immediate == || { trap - exit; exit 1; } } @@ -98,10 +101,8 @@ test_debug () { } test_run_ () { - trap 'echo 5 FATAL: Unexpected exit with code $?; exit 1' exit eval 3 24 $1 eval_ret=$? - trap - exit return 0 } @@ -132,6 +133,7 @@ test_expect_success () { } test_done () { + trap - exit case $test_failure in 0) # We could: -- Regards, Pavel Roskin - To unsubscribe from this list: send the line unsubscribe git in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html