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

[PATCH 2/3] t4031: fix broken &&-chains and add missing loop termination

From
Eric Sunshine via GitGitGadget <gitgitgadget@gmail.com>
Date
Aug 28, 2022, 05:17 UTC
Message-ID
<dce35a47012fecc6edc11c68e91dbb485c5bc36f.1661663880.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1339.git.1661663879.gitgitgadget@gmail.com>
From: Eric Sunshine <sunshine@sunshineco.com>

Fix &&-chain breaks in a couple tests which went unnoticed due to blind spots in the &&-chain linters. In particular, the "magic exit code 117" &&-chain checker built into test-lib.sh only recognizes broken &&-chains at the top-level; it does not work within `{...}` groups, `(...)` subshells, `$(...)` substitutions, or within bodies of compound statements, such as `if`, `for`, `while`, `case`, etc. Furthermore, `chainlint.sed`, which detects broken &&-chains only in `(...)` subshells, missed these cases (which are in subshells) because it (surprisingly) neglects to check for intact &&-chain on single-line `for` loops.

While at it, explicitly signal failure of commands within the `for` loops (which might arise due to the filesystem being full or "inode" exhaustion). This is important since failures within `for` and `while` loops can go unnoticed if not detected and signaled manually since the loop itself does not abort when a contained command fails, nor will a failure necessarily be detected when the loop finishes since the loop returns the exit code of the last command it ran on the final iteration, which may not be the command which failed.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
 t/t4301-merge-tree-write-tree.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/t/t4301-merge-tree-write-tree.sh b/t/t4301-merge-tree-write-tree.sh
index d44c7767f30..82a104bcbc9 100755
--- a/t/t4301-merge-tree-write-tree.sh
+++ b/t/t4301-merge-tree-write-tree.sh
@@ -150,7 +150,7 @@ test_expect_success 'directory rename + content conflict' '
 		cd dir-rename-and-content &&
 		test_write_lines 1 2 3 4 5 >foo &&
 		mkdir olddir &&
-		for i in a b c; do echo $i >olddir/$i; done
+		for i in a b c; do echo $i >olddir/$i || exit 1; done &&
 		git add foo olddir &&
 		git commit -m "original" &&
 
@@ -662,7 +662,7 @@ test_expect_success 'directory rename + rename/delete + modify/delete + director
 		cd 4-stacked-conflict &&
 		test_write_lines 1 2 3 4 5 >foo &&
 		mkdir olddir &&
-		for i in a b c; do echo $i >olddir/$i; done
+		for i in a b c; do echo $i >olddir/$i || exit 1; done &&
 		git add foo olddir &&
 		git commit -m "original" &&
 
-- 
gitgitgadget
Previous: Eric Sunshine via GitGitGadgetNext: Eric Sunshine via GitGitGadget
Message 3 of 12 in “fix failing t4301 test and &&-chain breakage”
  1. 0/3 fix failing t4301 test and &&-chain breakageEric Sunshine via GitGitGadget, Aug 28, 2022
  2. 1/3 t4301: account for behavior differences between sed implementationsEric Sunshine via GitGitGadget, Aug 28, 2022
  3. 2/3 t4031: fix broken &&-chains and add missing loop terminationEric Sunshine via GitGitGadget, Aug 28, 2022
  4. 3/3 t4301: emit blank line in more idiomatic fashionEric Sunshine via GitGitGadget, Aug 28, 2022
  5. Junio C HamanoAug 28, 2022
  6. Eric SunshineAug 28, 2022
  7. Junio C HamanoAug 29, 2022
  8. Elijah NewrenAug 30, 2022
  9. Eric SunshineAug 30, 2022
  10. Elijah NewrenAug 30, 2022
  11. Elijah NewrenAug 30, 2022
  12. Johannes SchindelinAug 30, 2022

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.