chainlint.pl: don't flag broken &&-chain if failure indicated explicitly
There are quite a few tests which print an error messages and then explicitly signal failure with `false`, `return 1`, or `exit 1` as the final command in an `if` branch. In these cases, the tests don't bother maintaining the &&-chain between `echo` and the explicit "test failed" indicator. Since such constructs are manually signaling failure, their &&-chain breakage is legitimate and safe -- both for the command immediately preceding `false`, `return`, or `exit`, as well as for all preceding commands in the `if` branch. Therefore, stop flagging &&-chain breakage in these sorts of cases. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
a8f30ee050
commit
832c68b3c2
9
t/chainlint/chain-break-false.expect
Normal file
9
t/chainlint/chain-break-false.expect
Normal file
@ -0,0 +1,9 @@
|
||||
if condition not satisified
|
||||
then
|
||||
echo it did not work...
|
||||
echo failed!
|
||||
false
|
||||
else
|
||||
echo it went okay ?!AMP?!
|
||||
congratulate user
|
||||
fi
|
10
t/chainlint/chain-break-false.test
Normal file
10
t/chainlint/chain-break-false.test
Normal file
@ -0,0 +1,10 @@
|
||||
# LINT: broken &&-chain okay if explicit "false" signals failure
|
||||
if condition not satisified
|
||||
then
|
||||
echo it did not work...
|
||||
echo failed!
|
||||
false
|
||||
else
|
||||
echo it went okay
|
||||
congratulate user
|
||||
fi
|
@ -1,3 +1,18 @@
|
||||
case "$(git ls-files)" in
|
||||
one ) echo pass one ;;
|
||||
* ) echo bad one ; return 1 ;;
|
||||
esac &&
|
||||
(
|
||||
case "$(git ls-files)" in
|
||||
two ) echo pass two ;;
|
||||
* ) echo bad two ; exit 1 ;;
|
||||
esac
|
||||
) &&
|
||||
case "$(git ls-files)" in
|
||||
dir/two"$LF"one ) echo pass both ;;
|
||||
* ) echo bad ; return 1 ;;
|
||||
esac &&
|
||||
|
||||
for i in 1 2 3 4 ; do
|
||||
git checkout main -b $i || return $?
|
||||
test_commit $i $i $i tag$i || return $?
|
||||
|
@ -1,3 +1,21 @@
|
||||
case "$(git ls-files)" in
|
||||
one) echo pass one ;;
|
||||
# LINT: broken &&-chain okay if explicit "return 1" signals failuire
|
||||
*) echo bad one; return 1 ;;
|
||||
esac &&
|
||||
(
|
||||
case "$(git ls-files)" in
|
||||
two) echo pass two ;;
|
||||
# LINT: broken &&-chain okay if explicit "exit 1" signals failuire
|
||||
*) echo bad two; exit 1 ;;
|
||||
esac
|
||||
) &&
|
||||
case "$(git ls-files)" in
|
||||
dir/two"$LF"one) echo pass both ;;
|
||||
# LINT: broken &&-chain okay if explicit "return 1" signals failuire
|
||||
*) echo bad; return 1 ;;
|
||||
esac &&
|
||||
|
||||
for i in 1 2 3 4 ; do
|
||||
# LINT: broken &&-chain okay if explicit "return $?" signals failure
|
||||
git checkout main -b $i || return $?
|
||||
|
@ -3,7 +3,7 @@
|
||||
do
|
||||
if false
|
||||
then
|
||||
echo "err" ?!AMP?!
|
||||
echo "err"
|
||||
exit 1
|
||||
fi ?!AMP?!
|
||||
foo
|
||||
|
@ -3,7 +3,7 @@
|
||||
do
|
||||
if false
|
||||
then
|
||||
# LINT: missing "&&" on "echo"
|
||||
# LINT: missing "&&" on "echo" okay since "exit 1" signals error explicitly
|
||||
echo "err"
|
||||
exit 1
|
||||
# LINT: missing "&&" on "fi"
|
||||
|
Reference in New Issue
Block a user