Re: [PATCH] Trapping exit in tests, using return for errors

2005-08-11 Thread Junio C Hamano
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

2005-08-11 Thread Junio C Hamano
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

2005-08-11 Thread Junio C Hamano
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

2005-08-11 Thread Pavel Roskin
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