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:

committed by
Junio C Hamano

parent
1b76f06508
commit
33be6cf51a
@ -820,6 +820,7 @@ ifndef::git-log[]
|
|||||||
|
|
||||||
--quiet::
|
--quiet::
|
||||||
Disable all output of the program. Implies `--exit-code`.
|
Disable all output of the program. Implies `--exit-code`.
|
||||||
|
Disables execution of external diff helpers.
|
||||||
endif::git-log[]
|
endif::git-log[]
|
||||||
endif::git-format-patch[]
|
endif::git-format-patch[]
|
||||||
|
|
||||||
|
@ -172,6 +172,59 @@ test_expect_success 'no diff with -diff' '
|
|||||||
grep Binary out
|
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
|
echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
|
||||||
|
|
||||||
test_expect_success 'force diff with "diff"' '
|
test_expect_success 'force diff with "diff"' '
|
||||||
|
Reference in New Issue
Block a user