[PATCH 2/5] t7510: use consistent &&-chains in loop
- From
Jeff King <peff@peff.net>
- Date
- Jun 17, 2014, 00:03 UTC
- Message-ID
- <20140617000343.GB17110@sigill.intra.peff.net>
- In-Reply-To
- <20140616235917.GA19499@sigill.intra.peff.net>
From: Michael J Gruber <git@drmicha.warpmail.net>
We check multiple commits in a loop. Because we want to break out of the loop if any single iteration fails, we use a subshell/exit like:
( for i in $stuff do do-something $i || exit 1 done )
However, we are inconsistent in our loop body. Some commands get their own "|| exit 1", and others try to chain to the next command with "&&", like:
X && Y || exit 1 Z || exit 1
This is a little hard to read and follow, because X and Y are treated differently for no good reason. But much worse, the second loop follows a similar pattern and gets it wrong. "Y" is expected to fail, so we use "&& exit 1", giving us:
X && Y && exit 1 Z || exit 1
That gets the test for X wrong (we do not exit unless both X fails and Y unexpectedly succeeds, but we would want to exit if _either_ is wrong). We can write this clearly and correctly by consistently using "&&", followed by a single "|| exit 1", and negating Y with "!" (as we would in a normal &&-chain). Like:
X && ! Y && Z || exit 1
Signed-off-by: Jeff King <peff@peff.net> --- I listed Michael as the author here, because this is the patch that I expected to come in his next re-roll, based on our discussion. I'm including it here because I'm about to touch the same area (and Michael, you'd probably want to rebase on top of this series anyway. Assuming I haven't screwed it up :) ).
t/t7510-signed-commit.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/t/t7510-signed-commit.sh b/t/t7510-signed-commit.sh index 37c3778..cdffcbd 100755 --- a/t/t7510-signed-commit.sh +++ b/t/t7510-signed-commit.sh @@ -50,18 +50,18 @@ test_expect_success GPG 'show signatures' ' for commit in initial second merge fourth-signed fifth-signed sixth-signed seventh-signed do git show --pretty=short --show-signature $commit >actual && - grep "Good signature from" actual || exit 1 - ! grep "BAD signature from" actual || exit 1 - echo $commit OK + grep "Good signature from" actual && + ! grep "BAD signature from" actual && + echo $commit OK || exit 1 done ) && ( for commit in merge^2 fourth-unsigned sixth-unsigned seventh-unsigned do git show --pretty=short --show-signature $commit >actual && - grep "Good signature from" actual && exit 1 - ! grep "BAD signature from" actual || exit 1 - echo $commit OK + ! grep "Good signature from" actual && + ! grep "BAD signature from" actual && + echo $commit OK || exit 1 done ) '
-- 2.0.0.566.gfe3e6b2