]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t3700: avoid suppressing git's exit code
authorSiddharth Shrimali <r.siddharth.shrimali@gmail.com>
Tue, 3 Mar 2026 20:40:28 +0000 (02:10 +0530)
committerJunio C Hamano <gitster@pobox.com>
Tue, 3 Mar 2026 21:29:28 +0000 (13:29 -0800)
Replace pipelines involving git commands with temporary files (actual)
to ensure that any crashes or unexpected exit codes from the git
commands are properly caught by the test suite. A simple pipeline
like 'git foo | grep bar' ignores the exit code of 'git', which
can hide regressions.

In cases where we were counting lines with 'wc -l' to ensure a
pattern was absent, simplify the logic to use '! grep' to avoid
subshells entirely.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Siddharth Shrimali <r.siddharth.shrimali@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3700-add.sh

index af93e53c12cfe37a6126ba7376eb0f4c1ad2d816..c9ce2f758c3e7e0caea170d91c7b76c878762dc4 100755 (executable)
@@ -38,7 +38,8 @@ test_expect_success 'Test with no pathspecs' '
 '
 
 test_expect_success 'Post-check that foo is in the index' '
-       git ls-files foo | grep foo
+       git ls-files foo >actual &&
+       grep foo actual
 '
 
 test_expect_success 'Test that "git add -- -q" works' '
@@ -195,8 +196,9 @@ test_expect_success 'git add with filemode=0, symlinks=0, and unmerged entries'
        echo new > file &&
        echo new > symlink &&
        git add file symlink &&
-       git ls-files --stage | grep "^100755 .* 0       file$" &&
-       git ls-files --stage | grep "^120000 .* 0       symlink$"
+       git ls-files --stage >actual &&
+       grep "^100755 .* 0      file$" actual &&
+       grep "^120000 .* 0      symlink$" actual
 '
 
 test_expect_success 'git add with filemode=0, symlinks=0 prefers stage 2 over stage 1' '
@@ -212,8 +214,9 @@ test_expect_success 'git add with filemode=0, symlinks=0 prefers stage 2 over st
        echo new > file &&
        echo new > symlink &&
        git add file symlink &&
-       git ls-files --stage | grep "^100755 .* 0       file$" &&
-       git ls-files --stage | grep "^120000 .* 0       symlink$"
+       git ls-files --stage >actual &&
+       grep "^100755 .* 0      file$" actual &&
+       grep "^120000 .* 0      symlink$" actual
 '
 
 test_expect_success 'git add --refresh' '
@@ -254,7 +257,8 @@ test_expect_success POSIXPERM,SANITY 'git add should fail atomically upon an unr
        date >foo2 &&
        chmod 0 foo2 &&
        test_must_fail git add --verbose . &&
-       ! ( git ls-files foo1 | grep foo1 )
+       git ls-files foo1 >actual &&
+       ! grep foo1 actual
 '
 
 rm -f foo2
@@ -265,7 +269,8 @@ test_expect_success POSIXPERM,SANITY 'git add --ignore-errors' '
        date >foo2 &&
        chmod 0 foo2 &&
        test_must_fail git add --verbose --ignore-errors . &&
-       git ls-files foo1 | grep foo1
+       git ls-files foo1 >actual &&
+       grep foo1 actual
 '
 
 rm -f foo2
@@ -277,7 +282,8 @@ test_expect_success POSIXPERM,SANITY 'git add (add.ignore-errors)' '
        date >foo2 &&
        chmod 0 foo2 &&
        test_must_fail git add --verbose . &&
-       git ls-files foo1 | grep foo1
+       git ls-files foo1 >actual &&
+       grep foo1 actual
 '
 rm -f foo2
 
@@ -288,7 +294,8 @@ test_expect_success POSIXPERM,SANITY 'git add (add.ignore-errors = false)' '
        date >foo2 &&
        chmod 0 foo2 &&
        test_must_fail git add --verbose . &&
-       ! ( git ls-files foo1 | grep foo1 )
+       git ls-files foo1 >actual &&
+       ! grep foo1 actual
 '
 rm -f foo2
 
@@ -299,7 +306,8 @@ test_expect_success POSIXPERM,SANITY '--no-ignore-errors overrides config' '
        date >foo2 &&
        chmod 0 foo2 &&
        test_must_fail git add --verbose --no-ignore-errors . &&
-       ! ( git ls-files foo1 | grep foo1 ) &&
+       git ls-files foo1 >actual &&
+       ! grep foo1 actual &&
        git config add.ignore-errors 0
 '
 rm -f foo2
@@ -308,8 +316,10 @@ test_expect_success BSLASHPSPEC "git add 'fo\\[ou\\]bar' ignores foobar" '
        git reset --hard &&
        touch fo\[ou\]bar foobar &&
        git add '\''fo\[ou\]bar'\'' &&
-       git ls-files fo\[ou\]bar | grep -F fo\[ou\]bar &&
-       ! ( git ls-files foobar | grep foobar )
+       git ls-files fo\[ou\]bar >actual &&
+       grep -F fo\[ou\]bar actual &&
+       git ls-files foobar >actual &&
+       ! grep foobar actual
 '
 
 test_expect_success 'git add to resolve conflicts on otherwise ignored path' '
@@ -326,7 +336,8 @@ test_expect_success 'git add to resolve conflicts on otherwise ignored path' '
 
 test_expect_success '"add non-existent" should fail' '
        test_must_fail git add non-existent &&
-       ! (git ls-files | grep "non-existent")
+       git ls-files >actual &&
+       ! grep "non-existent" actual
 '
 
 test_expect_success 'git add -A on empty repo does not error out' '
@@ -536,9 +547,11 @@ test_expect_success 'all statuses changed in folder if . is given' '
                touch x y z sub/a sub/dir/b &&
                git add -A &&
                git add --chmod=+x . &&
-               test $(git ls-files --stage | grep ^100644 | wc -l) -eq 0 &&
+               git ls-files --stage >actual &&
+               ! grep ^100644 actual &&
                git add --chmod=-x . &&
-               test $(git ls-files --stage | grep ^100755 | wc -l) -eq 0
+               git ls-files --stage >actual &&
+               ! grep ^100755 actual
        )
 '