On Fri, May 08, 2015 at 01:34:49PM -0700, Junio C Hamano wrote: > evgeny <illumsoft.org@xxxxxxxxx> writes: > > > expecting success: > > OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) && > > test "$OUT" -eq 141 > > > > t0005-signals.sh[499]: eval: syntax error at line 4: `(' unmatched > > Memory fault > > Does this work if you did > > OUT=$( ( (large_git ; echo $? 1>&3) | : ) 3>&2 ) && > > instead? It does for me. I've tested our suite with mksh before, and it passed (that's why the earlier check already covers ksh). But using the ksh I get from "apt-get install ksh" on Debian (ksh93, it looks like?) fails as described. The change above prevents the shell from crashing, and then if we also massage the code, the test passes (i.e., the patch below). I'm on the fence, though, on declaring ksh93 to be unsupported. I don't know how many other instances of this are in our test suite, and it's one more maintenance headache to deal with. Are there really platforms with no actual POSIX shell (on Solaris, for example, the xpg6 shell is a much better choice)? diff --git a/t/t0005-signals.sh b/t/t0005-signals.sh index e7f27eb..cbf778e 100755 --- a/t/t0005-signals.sh +++ b/t/t0005-signals.sh @@ -9,14 +9,23 @@ two one EOF +# $1 - expected signal number +# $2 - actual exit code +check_signal_exit () { + if test "$2" = "$(($1 + 128))"; then + return 0; # POSIX + elif test "$2" = "$(($1 + 256))"; then + return 0; # ksh + elif test "$2" = 3; then + return 0; # Windows + fi + echo >&2 "expected death by signal $1, got exit code $2" + return 1 +} + test_expect_success 'sigchain works' ' { test-sigchain >actual; ret=$?; } && - case "$ret" in - 143) true ;; # POSIX w/ SIGTERM=15 - 271) true ;; # ksh w/ SIGTERM=15 - 3) true ;; # Windows - *) false ;; - esac && + check_signal_exit 15 $ret && test_cmp expect actual ' @@ -40,13 +49,13 @@ test_expect_success 'create blob' ' ' test_expect_success !MINGW 'a constipated git dies with SIGPIPE' ' - OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) && - test "$OUT" -eq 141 + OUT=$( ( (large_git; echo $? 1>&3) | :) 3>&1 ) && + check_signal_exit 13 $OUT ' test_expect_success !MINGW 'a constipated git dies with SIGPIPE even if parent ignores it' ' - OUT=$( ((trap "" PIPE; large_git; echo $? 1>&3) | :) 3>&1 ) && - test "$OUT" -eq 141 + OUT=$( ( (trap "" PIPE; large_git; echo $? 1>&3) | :) 3>&1 ) && + check_signal_exit 13 $OUT ' test_done -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html