diff: correctly disable external_diff with --no-ext-diff
authorJunio C Hamano <gitster@pobox.com>
Wed, 18 Jul 2012 05:08:59 +0000 (22:08 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 18 Jul 2012 05:51:11 +0000 (22:51 -0700)
commitbd8c1a9b49933c766587c65de70a0b8ff518801f
treead3f40a7bb65521a4a194a2b0566d55b8bcdb033
parentd0f1ea6003d97e63110fa7d50bb07f546a909b6e
diff: correctly disable external_diff with --no-ext-diff

Upon seeing a type-change filepair, "diff --no-ext-diff" does not
show the usual "deletion followed by addition" split patch and does
not run the external diff driver either.

This is because the logic to disable external diff was placed at a
wrong level in the callchain.  run_diff_cmd() decides to show the
split patch only when external diff driver is not configured or
specified via GIT_EXTERNAL_DIFF environment, but this is done before
checking if --no-ext-diff was given.  To make things worse,
run_diff_cmd() checks --no-ext-diff and disables the output for such
a filepair completely, as the callchain below it (e.g. builtin_diff)
does not want to handle typechange filepairs.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
t/t4020-diff-external.sh