This is a series to clear false positive when applying Junio's suggestion to to a series written by Ævar [1]. Change 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 (5): test-lib-functions: introduce test_line_count_cmd t6402: use find(1) builtin to filter instead of grep t0041: use test_line_count_cmd to check std{out,err} 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/t0041-usage.sh | 53 ++++++---------- t/t6400-merge-df.sh | 16 ++--- t/t6402-merge-rename.sh | 132 +++++++++++++++++++--------------------- t/test-lib-functions.sh | 117 +++++++++++++++++++++++++++++++++++ 4 files changed, 204 insertions(+), 114 deletions(-) Range-diff against v1: 1: bdce5e51ff < -: ---------- test-lib-functions: introduce test_line_count_cmd -: ---------- > 1: a823312b19 test-lib-functions: introduce test_line_count_cmd 2: 09a440ed25 = 2: 6e8f2d4289 t6402: use find(1) builtin to filter instead of grep -: ---------- > 3: 33daa5ee2f t0041: use test_line_count_cmd to check std{out,err} 3: 98a335a442 ! 4: 729ebb8f50 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 --out = 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 = 2 git ls-files -o ++ test_line_count_cmd --out = 0 git ls-files -o else - test 1 -eq $(git ls-files -o | wc -l) -+ test_line_count_cmd --out = 3 git ls-files -o ++ test_line_count_cmd --out = 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 --out = 5 git ls-files -s && ++ test_line_count_cmd --out = 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 = 2 git ls-files -o ++ test_line_count_cmd --out = 0 git ls-files -o else - test 1 -eq $(git ls-files -o | wc -l) -+ test_line_count_cmd --out = 3 git ls-files -o ++ test_line_count_cmd --out = 1 git ls-files -o fi && test_path_is_file letters/file && 4: 69e4a0b6d7 ! 5: 1b450e4148 t6402: use test_line_count_cmd to count # of lines in stdout @@ 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 --out = 3 git ls-files -u && ++ test_line_count_cmd --out = 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 --out = 3 git ls-files -u && ++ test_line_count_cmd --out = 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 --out = 3 git ls-files -u && ++ test_line_count_cmd --out = 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 --out = 5 git ls-files -u && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test 3 -eq "$(git ls-files -u dir~HEAD | wc -l)" @@ t/t6402-merge-rename.sh: test_expect_success 'Rename+D/F conflict; renamed file + test_line_count_cmd --out = 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 --out = 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 --out = 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)" @@ t/t6402-merge-rename.sh: test_expect_success 'Same as previous, but merged other + test_line_count_cmd --out = 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 --out = 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: 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 --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_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 --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_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 = 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 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 = 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 fi && @@ 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 = 2 git ls-files -o ++ 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 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 = 4 git ls-files -o ++ 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 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 = 2 git ls-files -o && ++ 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_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 = 2 git ls-files -o && ++ test_line_count_cmd --out = 1 git ls-files -s && ++ test_line_count_cmd --out = 0 git ls-files -o && test $(git rev-parse HEAD:renamed_file) = $(git rev-parse HEAD~1:file) ' -- 2.32.0.278.gd42b80f139