Skip to content

Commit c24b7f6

Browse files
avargitster
authored andcommitted
pager: test for exit code with and without SIGPIPE
Add tests for how git behaves when the pager itself exits with non-zero, as well as for us exiting with 141 when we're killed with SIGPIPE due to the pager not consuming its output. There is some recent discussion[1] about these semantics, but aside from what we want to do in the future, we should have a test for the current behavior. This test construct is stolen from 7559a1b (unblock and unignore SIGPIPE, 2014-09-18). The reason not to make the test itself depend on the MINGW prerequisite is to make a subsequent commit easier to read. 1. https://lore.kernel.org/git/[email protected]/ Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 61ff12f commit c24b7f6

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

t/t7006-pager.sh

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,4 +656,86 @@ test_expect_success TTY 'git tag with auto-columns ' '
656656
test_cmp expect actual
657657
'
658658

659+
test_expect_success TTY 'git returns SIGPIPE on early pager exit' '
660+
test_when_finished "rm pager-used" &&
661+
test_config core.pager ">pager-used; head -n 1; exit 0" &&
662+
663+
if test_have_prereq !MINGW
664+
then
665+
OUT=$( ((test_terminal git log; echo $? 1>&3) | :) 3>&1 ) &&
666+
test_match_signal 13 "$OUT"
667+
else
668+
test_terminal git log
669+
fi &&
670+
test_path_is_file pager-used
671+
'
672+
673+
test_expect_success TTY 'git returns SIGPIPE on early pager non-zero exit' '
674+
test_when_finished "rm pager-used" &&
675+
test_config core.pager ">pager-used; head -n 1; exit 1" &&
676+
677+
if test_have_prereq !MINGW
678+
then
679+
OUT=$( ((test_terminal git log; echo $? 1>&3) | :) 3>&1 ) &&
680+
test_match_signal 13 "$OUT"
681+
else
682+
test_terminal git log
683+
fi &&
684+
test_path_is_file pager-used
685+
'
686+
687+
test_expect_success TTY 'git discards pager non-zero exit without SIGPIPE' '
688+
test_when_finished "rm pager-used" &&
689+
test_config core.pager "wc >pager-used; exit 1" &&
690+
691+
if test_have_prereq !MINGW
692+
then
693+
OUT=$( ((test_terminal git log; echo $? 1>&3) | :) 3>&1 ) &&
694+
test "$OUT" -eq 0
695+
else
696+
test_terminal git log
697+
fi &&
698+
test_path_is_file pager-used
699+
'
700+
701+
test_expect_success TTY 'git discards nonexisting pager without SIGPIPE' '
702+
test_when_finished "rm pager-used" &&
703+
test_config core.pager "wc >pager-used; does-not-exist" &&
704+
705+
if test_have_prereq !MINGW
706+
then
707+
OUT=$( ((test_terminal git log; echo $? 1>&3) | :) 3>&1 ) &&
708+
test "$OUT" -eq 0
709+
else
710+
test_terminal git log
711+
fi &&
712+
test_path_is_file pager-used
713+
'
714+
715+
test_expect_success TTY 'git attempts to page to nonexisting pager command, gets SIGPIPE' '
716+
test_config core.pager "does-not-exist" &&
717+
718+
if test_have_prereq !MINGW
719+
then
720+
OUT=$( ((test_terminal git log; echo $? 1>&3) | :) 3>&1 ) &&
721+
test_match_signal 13 "$OUT"
722+
else
723+
test_terminal git log
724+
fi
725+
'
726+
727+
test_expect_success TTY 'git returns SIGPIPE on propagated signals from pager' '
728+
test_when_finished "rm pager-used" &&
729+
test_config core.pager ">pager-used; test-tool sigchain" &&
730+
731+
if test_have_prereq !MINGW
732+
then
733+
OUT=$( ((test_terminal git log; echo $? 1>&3) | :) 3>&1 ) &&
734+
test_match_signal 13 "$OUT"
735+
else
736+
test_terminal git log
737+
fi &&
738+
test_path_is_file pager-used
739+
'
740+
659741
test_done

0 commit comments

Comments
 (0)