git/t/chainlint
Eric Sunshine ae0c55abf8 chainlint.pl: allow || echo to signal failure upstream of a pipe
The use of `|| return` (or `|| exit`) to signal failure within a loop
isn't effective when the loop is upstream of a pipe since the pipe
swallows all upstream exit codes and returns only the exit code of the
final command in the pipeline.

To work around this limitation, tests may adopt an alternative strategy
of signaling failure by emitting text which would never be emitted in
the non-failing case. For instance:

    while condition
    do
        command1 &&
        command2 ||
        echo "impossible text"
    done |
    sort >actual &&

Such usage indicates deliberate thought about failure cases by the test
author, thus flagging them as missing `|| return` (or `|| exit`) is not
helpful. Therefore, take this case into consideration when checking for
explicit loop termination.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-09-01 10:07:41 -07:00
..
arithmetic-expansion.expect
arithmetic-expansion.test
bash-array.expect
bash-array.test
blank-line.expect
blank-line.test
block-comment.expect
block-comment.test
block.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
block.test
broken-chain.expect
broken-chain.test
case-comment.expect
case-comment.test
case.expect
case.test
chain-break-background.expect chainlint.pl: don't require & background command to end with && 2022-09-01 10:07:40 -07:00
chain-break-background.test chainlint.pl: don't require & background command to end with && 2022-09-01 10:07:40 -07:00
chain-break-continue.expect
chain-break-continue.test
chain-break-false.expect chainlint.pl: don't flag broken &&-chain if failure indicated explicitly 2022-09-01 10:07:41 -07:00
chain-break-false.test chainlint.pl: don't flag broken &&-chain if failure indicated explicitly 2022-09-01 10:07:41 -07:00
chain-break-return-exit.expect chainlint.pl: don't flag broken &&-chain if failure indicated explicitly 2022-09-01 10:07:41 -07:00
chain-break-return-exit.test chainlint.pl: don't flag broken &&-chain if failure indicated explicitly 2022-09-01 10:07:41 -07:00
chain-break-status.expect chainlint.pl: don't flag broken &&-chain if $? handled explicitly 2022-09-01 10:07:41 -07:00
chain-break-status.test chainlint.pl: don't flag broken &&-chain if $? handled explicitly 2022-09-01 10:07:41 -07:00
close-nested-and-parent-together.expect
close-nested-and-parent-together.test
close-subshell.expect
close-subshell.test
command-substitution.expect
command-substitution.test
comment.expect
comment.test
complex-if-in-cuddled-loop.expect chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
complex-if-in-cuddled-loop.test
cuddled-if-then-else.expect
cuddled-if-then-else.test
cuddled-loop.expect
cuddled-loop.test
cuddled.expect
cuddled.test
exit-loop.expect
exit-loop.test
exit-subshell.expect
exit-subshell.test
for-loop.expect chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
for-loop.test
here-doc-close-subshell.expect
here-doc-close-subshell.test
here-doc-multi-line-command-subst.expect
here-doc-multi-line-command-subst.test
here-doc-multi-line-string.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
here-doc-multi-line-string.test
here-doc.expect
here-doc.test
if-in-loop.expect chainlint.pl: don't flag broken &&-chain if failure indicated explicitly 2022-09-01 10:07:41 -07:00
if-in-loop.test chainlint.pl: don't flag broken &&-chain if failure indicated explicitly 2022-09-01 10:07:41 -07:00
if-then-else.expect
if-then-else.test
incomplete-line.expect
incomplete-line.test
inline-comment.expect
inline-comment.test
loop-detect-failure.expect chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
loop-detect-failure.test chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
loop-detect-status.expect chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
loop-detect-status.test chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
loop-in-if.expect chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
loop-in-if.test
loop-upstream-pipe.expect chainlint.pl: allow || echo to signal failure upstream of a pipe 2022-09-01 10:07:41 -07:00
loop-upstream-pipe.test chainlint.pl: allow || echo to signal failure upstream of a pipe 2022-09-01 10:07:41 -07:00
multi-line-nested-command-substitution.expect
multi-line-nested-command-substitution.test
multi-line-string.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
multi-line-string.test
negated-one-liner.expect
negated-one-liner.test
nested-cuddled-subshell.expect
nested-cuddled-subshell.test
nested-here-doc.expect
nested-here-doc.test
nested-loop-detect-failure.expect chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
nested-loop-detect-failure.test chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
nested-subshell-comment.expect
nested-subshell-comment.test
nested-subshell.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
nested-subshell.test
not-heredoc.expect
not-heredoc.test
one-liner.expect
one-liner.test
p4-filespec.expect
p4-filespec.test
pipe.expect
pipe.test
return-loop.expect
return-loop.test
semicolon.expect chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
semicolon.test
subshell-here-doc.expect
subshell-here-doc.test
subshell-one-liner.expect
subshell-one-liner.test
t7900-subtree.expect t/Makefile: apply chainlint.pl to existing self-tests 2022-09-01 10:07:40 -07:00
t7900-subtree.test
while-loop.expect chainlint.pl: complain about loops lacking explicit failure handling 2022-09-01 10:07:41 -07:00
while-loop.test