1#!/bin/sh 2 3test_description='signals work as we expect' 4. ./test-lib.sh 5 6cat>expect <<EOF 7three 8two 9one 10EOF 11 12test_expect_success 'sigchain works'' 13 { test-sigchain >actual; ret=$?; } && 14 { 15 # Signal death by raise() on Windows acts like exit(3), 16 # regardless of the signal number. So we must allow that 17 # as well as the normal signal check. 18 test_match_signal 15 "$ret" || 19 test "$ret" = 3 20 } && 21 test_cmp expect actual 22' 23 24test_expect_success !MINGW 'signals are propagated using shell convention'' 25 # we use exec here to avoid any sub-shell interpretation 26 # of the exit code 27 git config alias.sigterm "!exec test-sigchain" && 28 test_expect_code 143 git sigterm 29' 30 31large_git () { 32for i in$(test_seq 1 100) 33do 34 git diff--cached --binary||return 35done 36} 37 38test_expect_success 'create blob'' 39 test-genrandom foo 16384 >file && 40 git add file 41' 42 43test_expect_success !MINGW 'a constipated git dies with SIGPIPE'' 44 OUT=$( ((large_git; echo $? 1>&3)| :) 3>&1 ) && 45 test_match_signal 13 "$OUT" 46' 47 48test_expect_success !MINGW 'a constipated git dies with SIGPIPE even if parent ignores it'' 49 OUT=$( ((trap "" PIPE; large_git; echo $? 1>&3)| :) 3>&1 ) && 50 test_match_signal 13 "$OUT" 51' 52 53test_done