|  | #!/bin/sh | 
|  |  | 
|  | test_description='signals work as we expect' | 
|  |  | 
|  | TEST_PASSES_SANITIZE_LEAK=true | 
|  | . ./test-lib.sh | 
|  |  | 
|  | cat >expect <<EOF | 
|  | three | 
|  | two | 
|  | one | 
|  | EOF | 
|  |  | 
|  | test_expect_success 'sigchain works' ' | 
|  | { test-tool sigchain >actual; ret=$?; } && | 
|  | { | 
|  | # Signal death by raise() on Windows acts like exit(3), | 
|  | # regardless of the signal number. So we must allow that | 
|  | # as well as the normal signal check. | 
|  | test_match_signal 15 "$ret" || | 
|  | test "$ret" = 3 | 
|  | } && | 
|  | test_cmp expect actual | 
|  | ' | 
|  |  | 
|  | test_expect_success !MINGW 'signals are propagated using shell convention' ' | 
|  | # we use exec here to avoid any sub-shell interpretation | 
|  | # of the exit code | 
|  | git config alias.sigterm "!exec test-tool sigchain" && | 
|  | test_expect_code 143 git sigterm | 
|  | ' | 
|  |  | 
|  | large_git () { | 
|  | for i in $(test_seq 1 100) | 
|  | do | 
|  | git diff --cached --binary || return | 
|  | done | 
|  | } | 
|  |  | 
|  | test_expect_success 'create blob' ' | 
|  | test-tool genrandom foo 16384 >file && | 
|  | git add file | 
|  | ' | 
|  |  | 
|  | test_expect_success !MINGW 'a constipated git dies with SIGPIPE' ' | 
|  | OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) && | 
|  | test_match_signal 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_match_signal 13 "$OUT" | 
|  | ' | 
|  |  | 
|  | test_done |