1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-10-28 12:59:41 +01:00

t4020: test exit code with external diffs

Add tests to check the exit code of git diff with its options --quiet
and --exit-code when using an external diff program.  Currently we
cannot tell whether it found significant changes or not.

While at it, document briefly that --quiet turns off execution of
external diff programs because that behavior surprised me for a moment
while writing the tests.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe 2024-06-09 09:38:24 +02:00 committed by Junio C Hamano
parent 1b76f06508
commit 33be6cf51a
2 changed files with 54 additions and 0 deletions

View file

@ -820,6 +820,7 @@ ifndef::git-log[]
--quiet::
Disable all output of the program. Implies `--exit-code`.
Disables execution of external diff helpers.
endif::git-log[]
endif::git-format-patch[]

View file

@ -172,6 +172,59 @@ test_expect_success 'no diff with -diff' '
grep Binary out
'
check_external_diff () {
expect_code=$1
expect_out=$2
expect_err=$3
command_code=$4
shift 4
options="$@"
command="echo output; exit $command_code;"
desc="external diff '$command'"
with_options="${options:+ with }$options"
test_expect_success "$desc via attribute$with_options" "
test_config diff.foo.command \"$command\" &&
echo \"file diff=foo\" >.gitattributes &&
test_expect_code $expect_code git diff $options >out 2>err &&
test_cmp $expect_out out &&
test_cmp $expect_err err
"
test_expect_success "$desc via diff.external$with_options" "
test_config diff.external \"$command\" &&
>.gitattributes &&
test_expect_code $expect_code git diff $options >out 2>err &&
test_cmp $expect_out out &&
test_cmp $expect_err err
"
test_expect_success "$desc via GIT_EXTERNAL_DIFF$with_options" "
>.gitattributes &&
test_expect_code $expect_code env \
GIT_EXTERNAL_DIFF=\"$command\" \
git diff $options >out 2>err &&
test_cmp $expect_out out &&
test_cmp $expect_err err
"
}
test_expect_success 'setup output files' '
: >empty &&
echo output >output &&
echo "fatal: external diff died, stopping at file" >error
'
check_external_diff 0 output empty 0
check_external_diff 128 output error 1
check_external_diff 1 output empty 0 --exit-code
check_external_diff 128 output error 1 --exit-code
check_external_diff 1 empty empty 0 --quiet
check_external_diff 1 empty empty 1 --quiet # we don't even call the program
echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
test_expect_success 'force diff with "diff"' '