git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[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
Previous: Jeff KingNext: Jeff King
Message 7 of 10 in “pretty: avoid reading past end-of-string with "%G"”
  1. pretty: avoid reading past end-of-string with "%G"Jeff King, Jun 16, 2014
  2. t7510: check %G* pretty-format outputJeff King, Jun 16, 2014
  3. Eric SunshineJun 16, 2014
  4. Jeff KingJun 16, 2014
  5. 0/5 --format=%G tests and fixesJeff King, Jun 16, 2014
  6. 1/5 t7510: stop referring to master in later testsJeff King, Jun 16, 2014
  7. 2/5 t7510: use consistent &&-chains in loopJeff King, Jun 17, 2014
  8. 3/5 t7510: test a commit signed by an unknown keyJeff King, Jun 17, 2014
  9. 4/5 t7510: check %G* pretty-format outputJeff King, Jun 17, 2014
  10. 5/5 pretty: avoid reading past end-of-string with "%G"Jeff King, Jun 17, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.