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

[GSoC][PATCH] tests: avoid using pipes

From
JCJonathan Chang <ttjtftx@gmail.com>
Date
Mar 9, 2019, 15:45 UTC
Message-ID
<20190309154555.33407-1-ttjtftx@gmail.com>
This is my attempt for this year's GSoC microproject.

I copied the commit message of the commit[1] mentioned in the microproject page[2]. Is this OK?

Here is a summary of what I did:
	- simple substitution as in c6f44e1da5[1]. 
	- besides simple substitution, I moved some git command out of command 
		substitution to improve readability, which was not possible with pipes, 
		while in these cases keeping them inside won't discard git's exit code.
	- use actual1 and actual2 in cases where actual is already in use.
	- use `sort -o actual actual` to avoid using actual1 and actual2.

[1] c6f44e1da5 ("t9813: avoid using pipes", 2017-01-04) [2] https://git.github.io/SoC-2019-Microprojects/

---------------------->8------------------- The exit code of the upstream in a pipe is ignored thus we should avoid using it. By writing out the output of the git command to a file, we can test the exit codes of both the commands.

Signed-off-by: Jonathan Chang <ttjtftx@gmail.com>
---
 t/t0000-basic.sh       | 28 ++++++++++++++--------------
 t/t0003-attributes.sh  | 13 ++++++++-----
 t/t0022-crlf-rename.sh |  6 +++---
 3 files changed, 25 insertions(+), 22 deletions(-)
diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
index b6566003dd..adc9545973 100755
--- a/t/t0000-basic.sh
+++ b/t/t0000-basic.sh
@@ -1118,27 +1118,25 @@ P=$(test_oid root)
 
 test_expect_success 'git commit-tree records the correct tree in a commit' '
 	commit0=$(echo NO | git commit-tree $P) &&
-	tree=$(git show --pretty=raw $commit0 |
-		 sed -n -e "s/^tree //p" -e "/^author /q") &&
+	git show --pretty=raw $commit0 >actual &&
+	tree=$(sed -n -e "s/^tree //p" -e "/^author /q" actual) &&
 	test "z$tree" = "z$P"
 '
 
 test_expect_success 'git commit-tree records the correct parent in a commit' '
 	commit1=$(echo NO | git commit-tree $P -p $commit0) &&
-	parent=$(git show --pretty=raw $commit1 |
-		sed -n -e "s/^parent //p" -e "/^author /q") &&
+	git show --pretty=raw $commit1 >actual &&
+	parent=$(sed -n -e "s/^parent //p" -e "/^author /q" actual) &&
 	test "z$commit0" = "z$parent"
 '
 
 test_expect_success 'git commit-tree omits duplicated parent in a commit' '
 	commit2=$(echo NO | git commit-tree $P -p $commit0 -p $commit0) &&
-	     parent=$(git show --pretty=raw $commit2 |
-		sed -n -e "s/^parent //p" -e "/^author /q" |
-		sort -u) &&
+	git show --pretty=raw $commit2 >actual &&
+	parent=$(sed -n -e "s/^parent //p" -e "/^author /q" actual | sort -u) &&
 	test "z$commit0" = "z$parent" &&
-	numparent=$(git show --pretty=raw $commit2 |
-		sed -n -e "s/^parent //p" -e "/^author /q" |
-		wc -l) &&
+	git show --pretty=raw $commit2 >actual &&
+	numparent=$(sed -n -e "s/^parent //p" -e "/^author /q" actual | wc -l) &&
 	test $numparent = 1
 '
 
@@ -1147,7 +1145,8 @@ test_expect_success 'update-index D/F conflict' '
 	mv path2 path0 &&
 	mv tmp path2 &&
 	git update-index --add --replace path2 path0/file2 &&
-	numpath0=$(git ls-files path0 | wc -l) &&
+	git ls-files path0 >actual &&
+	numpath0=$(wc -l actual) &&
 	test $numpath0 = 1
 '
 
@@ -1162,12 +1161,13 @@ test_expect_success 'very long name in the index handled sanely' '
 	>path4 &&
 	git update-index --add path4 &&
 	(
-		git ls-files -s path4 |
-		sed -e "s/	.*/	/" |
+		git ls-files -s path4 >actual &&
+		sed -e "s/	.*/	/" actual |
 		tr -d "\012" &&
 		echo "$a"
 	) | git update-index --index-info &&
-	len=$(git ls-files "a*" | wc -c) &&
+	git ls-files "a*" >actual &&
+	len=$(wc -c actual) &&
 	test $len = 4098
 '
 
diff --git a/t/t0003-attributes.sh b/t/t0003-attributes.sh
index 71e63d8b50..14274f1ced 100755
--- a/t/t0003-attributes.sh
+++ b/t/t0003-attributes.sh
@@ -203,15 +203,18 @@ test_expect_success 'attribute test: read paths from stdin' '
 test_expect_success 'attribute test: --all option' '
 	grep -v unspecified <expect-all | sort >specified-all &&
 	sed -e "s/:.*//" <expect-all | uniq >stdin-all &&
-	git check-attr --stdin --all <stdin-all | sort >actual &&
+	git check-attr --stdin --all <stdin-all >actual &&
+	sort -o actual actual &&
 	test_cmp specified-all actual
 '
 
 test_expect_success 'attribute test: --cached option' '
-	git check-attr --cached --stdin --all <stdin-all | sort >actual &&
+	git check-attr --cached --stdin --all <stdin-all >actual &&
+	sort -o actual actual &&
 	test_must_be_empty actual &&
 	git add .gitattributes a/.gitattributes a/b/.gitattributes &&
-	git check-attr --cached --stdin --all <stdin-all | sort >actual &&
+	git check-attr --cached --stdin --all <stdin-all >actual &&
+	sort -o actual actual &&
 	test_cmp specified-all actual
 '
 
@@ -301,8 +304,8 @@ test_expect_success 'bare repository: check that --cached honors index' '
 	(
 		cd bare.git &&
 		GIT_INDEX_FILE=../.git/index \
-		git check-attr --cached --stdin --all <../stdin-all |
-		sort >actual &&
+		git check-attr --cached --stdin --all <../stdin-all >actual &&
+		sort -o actual actual &&
 		test_cmp ../specified-all actual
 	)
 '
diff --git a/t/t0022-crlf-rename.sh b/t/t0022-crlf-rename.sh
index 7af3fbcc7b..b4772b72f7 100755
--- a/t/t0022-crlf-rename.sh
+++ b/t/t0022-crlf-rename.sh
@@ -23,10 +23,10 @@ test_expect_success setup '
 
 test_expect_success 'diff -M' '
 
-	git diff-tree -M -r --name-status HEAD^ HEAD |
-	sed -e "s/R[0-9]*/RNUM/" >actual &&
+	git diff-tree -M -r --name-status HEAD^ HEAD >actual1 &&
+	sed -e "s/R[0-9]*/RNUM/" actual1 >actual2 &&
 	echo "RNUM	sample	elpmas" >expect &&
-	test_cmp expect actual
+	test_cmp expect actual2
 
 '
 
-- 
2.21.0
Next: Thomas Gummerer
Message 1 of 20 in “tests: avoid using pipes”
  1. Jonathan ChangMar 9, 2019
  2. Thomas GummererMar 9, 2019
  3. [GSoC][PATCH v2 1/5] t0000-basic: fix an indentation errorJonathan Chang, Mar 10, 2019
  4. [GSoC][PATCH v2 2/5] t0000-basic: avoid using pipesJonathan Chang, Mar 10, 2019
  5. [GSoC][PATCH v2 3/5] t0003-attributes: avoid using pipesJonathan Chang, Mar 10, 2019
  6. [GSoC][PATCH v2 4/5] t0022-crlf-rename: avoid using pipesJonathan Chang, Mar 10, 2019
  7. [GSoC][PATCH v2 5/5] t0000-basic: use test_line_count instead of wc -lJonathan Chang, Mar 10, 2019
  8. Eric SunshineMar 10, 2019
  9. ttjtftxMar 11, 2019
  10. Eric SunshineMar 10, 2019
  11. Eric SunshineMar 10, 2019
  12. jonathan changMar 15, 2019
  13. Thomas GummererMar 10, 2019
  14. jonathan changMar 15, 2019
  15. Christian CouderMar 15, 2019
  16. Christian CouderMar 10, 2019
  17. ttjtftxMar 10, 2019
  18. Christian CouderMar 10, 2019
  19. Fwd: [GSoC][PATCH v2 4/5] t0022-crlf-rename: avoid using pipesttjtftx, Mar 11, 2019
  20. Fwd: [GSoC][PATCH] tests: avoid using pipesjonathan chang, Mar 11, 2019

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.