This is a series to clear false positive when applying Junio's suggestion to to a series written by Ævar [1]. Change in v3 since v2: * --err was dropped entirely * --out is not an option anymore, <binops> and <value> is the first two arguments that fed into test_line_count_cmd Change in v2 since v1: * Documentation for test_line_count_cmd has been written in more detail with examples * The outfile and errfile will be created only if --out and/or --err was specified for better "-v" * outfile and errfile will be created in $TRASH_DIRECTORY/.git/trash iff $TRASH_DIRECTORY/.git is a directory, otherwise $TRASH_DIRECTORY, avoid "git rev-parse --git-dir" because we may want to test it, too. * Use test_when_finished to clean those files instead of manual "rm -f", also for better "-v" * Merge multiple instance of "$@" run into one, for better auditing * t0041 is also converted to use new helper * With the change to location of outfile and errfile, output of "git ls-files -o" has been restored. * Fix double space before "&&" in the end of test command. 1: https://lore.kernel.org/git/87r1j42ffz.fsf@xxxxxxxxxxxxxxxxxxx/ Đoàn Trần Công Danh (4): test-lib-functions: introduce test_line_count_cmd t6402: use find(1) builtin to filter instead of grep t6400: use test_line_count_cmd to count # of lines in stdout t6402: use test_line_count_cmd to count # of lines in stdout t/t6400-merge-df.sh | 16 ++--- t/t6402-merge-rename.sh | 132 +++++++++++++++++++--------------------- t/test-lib-functions.sh | 80 ++++++++++++++++++++++++ 3 files changed, 150 insertions(+), 78 deletions(-) Range-diff against v2: 1: a823312b19 < -: ---------- test-lib-functions: introduce test_line_count_cmd -: ---------- > 1: 255ba9b067 test-lib-functions: introduce test_line_count_cmd 2: 6e8f2d4289 = 2: 38cd3f93a0 t6402: use find(1) builtin to filter instead of grep 3: 33daa5ee2f < -: ---------- t0041: use test_line_count_cmd to check std{out,err} 4: 729ebb8f50 ! 3: efb0905dd3 t6400: use test_line_count_cmd to count # of lines in stdout @@ t/t6400-merge-df.sh: test_expect_success 'modify/delete + directory/file conflic - test 5 -eq $(git ls-files -s | wc -l) && - test 4 -eq $(git ls-files -u | wc -l) && -+ test_line_count_cmd --out = 5 git ls-files -s && -+ test_line_count_cmd --out = 4 git ls-files -u && ++ test_line_count_cmd = 5 git ls-files -s && ++ test_line_count_cmd = 4 git ls-files -u && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test 0 -eq $(git ls-files -o | wc -l) -+ test_line_count_cmd --out = 0 git ls-files -o ++ test_line_count_cmd = 0 git ls-files -o else - test 1 -eq $(git ls-files -o | wc -l) -+ test_line_count_cmd --out = 1 git ls-files -o ++ test_line_count_cmd = 1 git ls-files -o fi && test_path_is_file letters/file && @@ t/t6400-merge-df.sh: test_expect_success 'modify/delete + directory/file conflic - test 5 -eq $(git ls-files -s | wc -l) && - test 4 -eq $(git ls-files -u | wc -l) && -+ test_line_count_cmd --out = 5 git ls-files -s && -+ test_line_count_cmd --out = 4 git ls-files -u && ++ test_line_count_cmd = 5 git ls-files -s && ++ test_line_count_cmd = 4 git ls-files -u && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test 0 -eq $(git ls-files -o | wc -l) -+ test_line_count_cmd --out = 0 git ls-files -o ++ test_line_count_cmd = 0 git ls-files -o else - test 1 -eq $(git ls-files -o | wc -l) -+ test_line_count_cmd --out = 1 git ls-files -o ++ test_line_count_cmd = 1 git ls-files -o fi && test_path_is_file letters/file && 5: 1b450e4148 ! 4: 8fc0f3ffd2 t6402: use test_line_count_cmd to count # of lines in stdout @@ t/t6402-merge-rename.sh: test_expect_success 'pull renaming branch into unrenami - test_line_count = 3 b.stages && - git ls-files -s N >n.stages && - test_line_count = 1 n.stages && -+ test_line_count_cmd --out = 3 git ls-files -u B && -+ test_line_count_cmd --out = 1 git ls-files -s N && ++ test_line_count_cmd = 3 git ls-files -u B && ++ test_line_count_cmd = 1 git ls-files -s N && sed -ne "/^g/{ p q @@ t/t6402-merge-rename.sh: test_expect_success 'pull renaming branch into another - test_line_count = 3 b.stages && - git ls-files -s N >n.stages && - test_line_count = 1 n.stages && -+ test_line_count_cmd --out = 3 git ls-files -u B && -+ test_line_count_cmd --out = 1 git ls-files -s N && ++ test_line_count_cmd = 3 git ls-files -u B && ++ test_line_count_cmd = 1 git ls-files -s N && sed -ne "/^g/{ p q @@ t/t6402-merge-rename.sh: test_expect_success 'pull unrenaming branch into renami - test_line_count = 3 b.stages && - git ls-files -s N >n.stages && - test_line_count = 1 n.stages && -+ test_line_count_cmd --out = 3 git ls-files -u B && -+ test_line_count_cmd --out = 1 git ls-files -s N && ++ test_line_count_cmd = 3 git ls-files -u B && ++ test_line_count_cmd = 1 git ls-files -s N && sed -ne "/^g/{ p q @@ t/t6402-merge-rename.sh: test_expect_success 'pull conflicting renames' \ - test_line_count = 1 c.stages && - git ls-files -s N >n.stages && - test_line_count = 1 n.stages && -+ test_line_count_cmd --out = 1 git ls-files -u A && -+ test_line_count_cmd --out = 1 git ls-files -u B && -+ test_line_count_cmd --out = 1 git ls-files -u C && -+ test_line_count_cmd --out = 1 git ls-files -s N && ++ test_line_count_cmd = 1 git ls-files -u A && ++ test_line_count_cmd = 1 git ls-files -u B && ++ test_line_count_cmd = 1 git ls-files -u C && ++ test_line_count_cmd = 1 git ls-files -s N && sed -ne "/^g/{ p q @@ t/t6402-merge-rename.sh: test_expect_success 'Rename+D/F conflict; renamed file - test 3 -eq "$(git ls-files -u | wc -l)" && - test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" && -+ test_line_count_cmd --out = 3 git ls-files -u && -+ test_line_count_cmd --out = 2 git ls-files -u dir/file-in-the-way && ++ test_line_count_cmd = 3 git ls-files -u && ++ test_line_count_cmd = 2 git ls-files -u dir/file-in-the-way && test_must_fail git diff --quiet && test_must_fail git diff --cached --quiet && @@ t/t6402-merge-rename.sh: test_expect_success 'Same as previous, but merged other - test 3 -eq "$(git ls-files -u | wc -l)" && - test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" && -+ test_line_count_cmd --out = 3 git ls-files -u && -+ test_line_count_cmd --out = 2 git ls-files -u dir/file-in-the-way && ++ test_line_count_cmd = 3 git ls-files -u && ++ test_line_count_cmd = 2 git ls-files -u dir/file-in-the-way && test_must_fail git diff --quiet && test_must_fail git diff --cached --quiet && @@ t/t6402-merge-rename.sh: test_expect_success 'Rename+D/F conflict; renamed file - test 3 -eq "$(git ls-files -u | wc -l)" && - test 3 -eq "$(git ls-files -u dir | wc -l)" && -+ test_line_count_cmd --out = 3 git ls-files -u && -+ test_line_count_cmd --out = 3 git ls-files -u dir && ++ test_line_count_cmd = 3 git ls-files -u && ++ test_line_count_cmd = 3 git ls-files -u dir && test_must_fail git diff --quiet && test_must_fail git diff --cached --quiet && @@ t/t6402-merge-rename.sh: test_expect_success 'Rename+D/F conflict; renamed file test_must_fail git merge --strategy=recursive dir-in-way && - test 5 -eq "$(git ls-files -u | wc -l)" && -+ test_line_count_cmd --out = 5 git ls-files -u && ++ test_line_count_cmd = 5 git ls-files -u && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test 3 -eq "$(git ls-files -u dir~HEAD | wc -l)" -+ test_line_count_cmd --out = 3 git ls-files -u dir~HEAD ++ test_line_count_cmd = 3 git ls-files -u dir~HEAD else - test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" + git ls-files -u dir >out && -+ test_line_count_cmd --out = 3 grep -v file-in-the-way out ++ test_line_count_cmd = 3 grep -v file-in-the-way out fi && - test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" && -+ test_line_count_cmd --out = 2 git ls-files -u dir/file-in-the-way && ++ test_line_count_cmd = 2 git ls-files -u dir/file-in-the-way && test_must_fail git diff --quiet && test_must_fail git diff --cached --quiet && @@ t/t6402-merge-rename.sh: test_expect_success 'Same as previous, but merged other test_must_fail git merge --strategy=recursive renamed-file-has-conflicts && - test 5 -eq "$(git ls-files -u | wc -l)" && -+ test_line_count_cmd --out = 5 git ls-files -u && ++ test_line_count_cmd = 5 git ls-files -u && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test 3 -eq "$(git ls-files -u dir~renamed-file-has-conflicts | wc -l)" -+ test_line_count_cmd --out = 3 git ls-files -u dir~renamed-file-has-conflicts ++ test_line_count_cmd = 3 git ls-files -u dir~renamed-file-has-conflicts else - test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" + git ls-files -u dir >out && -+ test_line_count_cmd --out = 3 grep -v file-in-the-way out ++ test_line_count_cmd = 3 grep -v file-in-the-way out fi && - test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" && -+ test_line_count_cmd --out = 2 git ls-files -u dir/file-in-the-way && ++ test_line_count_cmd = 2 git ls-files -u dir/file-in-the-way && test_must_fail git diff --quiet && test_must_fail git diff --cached --quiet && @@ t/t6402-merge-rename.sh: test_expect_success 'both rename source and destination if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test 2 -eq "$(git ls-files -u | wc -l)" -+ test_line_count_cmd --out = 2 git ls-files -u ++ test_line_count_cmd = 2 git ls-files -u else - test 1 -eq "$(git ls-files -u | wc -l)" -+ test_line_count_cmd --out = 1 git ls-files -u ++ test_line_count_cmd = 1 git ls-files -u fi && test_must_fail git diff --quiet && @@ t/t6402-merge-rename.sh: then - test 4 -eq "$(git ls-files -u | wc -l)" && - test 2 -eq "$(git ls-files -u one | wc -l)" && - test 2 -eq "$(git ls-files -u two | wc -l)" && -+ test_line_count_cmd --out = 4 git ls-files -u && -+ test_line_count_cmd --out = 2 git ls-files -u one && -+ test_line_count_cmd --out = 2 git ls-files -u two && ++ test_line_count_cmd = 4 git ls-files -u && ++ test_line_count_cmd = 2 git ls-files -u one && ++ test_line_count_cmd = 2 git ls-files -u two && test_must_fail git diff --quiet && @@ t/t6402-merge-rename.sh: else - test 2 -eq "$(git ls-files -u | wc -l)" && - test 1 -eq "$(git ls-files -u one | wc -l)" && - test 1 -eq "$(git ls-files -u two | wc -l)" && -+ test_line_count_cmd --out = 2 git ls-files -u && -+ test_line_count_cmd --out = 1 git ls-files -u one && -+ test_line_count_cmd --out = 1 git ls-files -u two && ++ test_line_count_cmd = 2 git ls-files -u && ++ test_line_count_cmd = 1 git ls-files -u one && ++ test_line_count_cmd = 1 git ls-files -u two && test_must_fail git diff --quiet && @@ t/t6402-merge-rename.sh: test_expect_success 'pair rename to parent of other (D/ - test 4 -eq "$(git ls-files -u | wc -l)" && - test 2 -eq "$(git ls-files -u one | wc -l)" && - test 2 -eq "$(git ls-files -u two | wc -l)" -+ test_line_count_cmd --out = 4 git ls-files -u && -+ test_line_count_cmd --out = 2 git ls-files -u one && -+ test_line_count_cmd --out = 2 git ls-files -u two ++ test_line_count_cmd = 4 git ls-files -u && ++ test_line_count_cmd = 2 git ls-files -u one && ++ test_line_count_cmd = 2 git ls-files -u two else - test 2 -eq "$(git ls-files -u | wc -l)" && - test 1 -eq "$(git ls-files -u one | wc -l)" && - test 1 -eq "$(git ls-files -u two | wc -l)" -+ test_line_count_cmd --out = 2 git ls-files -u && -+ test_line_count_cmd --out = 1 git ls-files -u one && -+ test_line_count_cmd --out = 1 git ls-files -u two ++ test_line_count_cmd = 2 git ls-files -u && ++ test_line_count_cmd = 1 git ls-files -u one && ++ test_line_count_cmd = 1 git ls-files -u two fi && test_must_fail git diff --quiet && @@ t/t6402-merge-rename.sh: test_expect_success 'check handling of differently rena - test 1 -eq "$(git ls-files -u two~second-rename | wc -l)" && - test 1 -eq "$(git ls-files -u original | wc -l)" && - test 0 -eq "$(git ls-files -o | wc -l)" -+ test_line_count_cmd --out = 5 git ls-files -s && -+ test_line_count_cmd --out = 3 git ls-files -u && -+ test_line_count_cmd --out = 1 git ls-files -u one~HEAD && -+ test_line_count_cmd --out = 1 git ls-files -u two~second-rename && -+ test_line_count_cmd --out = 1 git ls-files -u original && -+ test_line_count_cmd --out = 0 git ls-files -o ++ test_line_count_cmd = 5 git ls-files -s && ++ test_line_count_cmd = 3 git ls-files -u && ++ test_line_count_cmd = 1 git ls-files -u one~HEAD && ++ test_line_count_cmd = 1 git ls-files -u two~second-rename && ++ test_line_count_cmd = 1 git ls-files -u original && ++ test_line_count_cmd = 0 git ls-files -o else - test 5 -eq "$(git ls-files -s | wc -l)" && - test 3 -eq "$(git ls-files -u | wc -l)" && @@ t/t6402-merge-rename.sh: test_expect_success 'check handling of differently rena - test 1 -eq "$(git ls-files -u two | wc -l)" && - test 1 -eq "$(git ls-files -u original | wc -l)" && - test 2 -eq "$(git ls-files -o | wc -l)" -+ test_line_count_cmd --out = 5 git ls-files -s && -+ test_line_count_cmd --out = 3 git ls-files -u && -+ test_line_count_cmd --out = 1 git ls-files -u one && -+ test_line_count_cmd --out = 1 git ls-files -u two && -+ test_line_count_cmd --out = 1 git ls-files -u original && -+ test_line_count_cmd --out = 2 git ls-files -o ++ test_line_count_cmd = 5 git ls-files -s && ++ test_line_count_cmd = 3 git ls-files -u && ++ test_line_count_cmd = 1 git ls-files -u one && ++ test_line_count_cmd = 1 git ls-files -u two && ++ test_line_count_cmd = 1 git ls-files -u original && ++ test_line_count_cmd = 2 git ls-files -o fi && test_path_is_file one/file && @@ t/t6402-merge-rename.sh: test_expect_success 'check handling of differently rena - test 1 -eq "$(git ls-files -u two | wc -l)" && - test 1 -eq "$(git ls-files -u original | wc -l)" && - test 0 -eq "$(git ls-files -o | wc -l)" && -+ test_line_count_cmd --out = 3 git ls-files -u && -+ test_line_count_cmd --out = 1 git ls-files -u one && -+ test_line_count_cmd --out = 1 git ls-files -u two && -+ test_line_count_cmd --out = 1 git ls-files -u original && -+ test_line_count_cmd --out = 0 git ls-files -o && ++ test_line_count_cmd = 3 git ls-files -u && ++ test_line_count_cmd = 1 git ls-files -u one && ++ test_line_count_cmd = 1 git ls-files -u two && ++ test_line_count_cmd = 1 git ls-files -u original && ++ test_line_count_cmd = 0 git ls-files -o && test_path_is_file one && test_path_is_file two && @@ t/t6402-merge-rename.sh: test_expect_success 'setup merge of rename + small chan - test 1 -eq $(git ls-files -s | wc -l) && - test 0 -eq $(git ls-files -o | wc -l) && -+ test_line_count_cmd --out = 1 git ls-files -s && -+ test_line_count_cmd --out = 0 git ls-files -o && ++ test_line_count_cmd = 1 git ls-files -s && ++ test_line_count_cmd = 0 git ls-files -o && test $(git rev-parse HEAD:renamed_file) = $(git rev-parse HEAD~1:file) ' -- 2.32.0.278.gd42b80f139