Skip to content

Commit

Permalink
Teach "git diff" to honour --[no-]ext-diff
Browse files Browse the repository at this point in the history
The original intention of 72909be (Add diff-option --ext-diff, 2007-06-30)
was to optionally allow the use of external diff viewer in "git log"
family (while keeping them disabled by default).  It exposed the "allow
external diff" bit to the UI, but forgot to adjust the "git diff" codepath
that was set up to always allow use of the external diff viewer.

Noticed by Nazri Ramliy; tests by René Scharfe squashed in.

Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
gitster committed Nov 26, 2008
1 parent 37a7744 commit 61af494
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
5 changes: 4 additions & 1 deletion builtin-diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,9 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
/* Otherwise, we are doing the usual "git" diff */
rev.diffopt.skip_stat_unmatch = !!diff_auto_refresh_index;

/* Default to let external be used */
DIFF_OPT_SET(&rev.diffopt, ALLOW_EXTERNAL);

if (nongit)
die("Not a git repository");
argc = setup_revisions(argc, argv, &rev, NULL);
Expand All @@ -298,7 +301,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
if (diff_setup_done(&rev.diffopt) < 0)
die("diff_setup_done failed");
}
DIFF_OPT_SET(&rev.diffopt, ALLOW_EXTERNAL);

DIFF_OPT_SET(&rev.diffopt, RECURSIVE);

/*
Expand Down
21 changes: 21 additions & 0 deletions t/t4020-diff-external.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@ test_expect_success 'GIT_EXTERNAL_DIFF environment should apply only to diff' '
'

test_expect_success 'GIT_EXTERNAL_DIFF environment and --no-ext-diff' '
GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff |
grep "^diff --git a/file b/file"
'

test_expect_success 'diff attribute' '
git config diff.parrot.command echo &&
Expand All @@ -68,6 +75,13 @@ test_expect_success 'diff attribute should apply only to diff' '
'

test_expect_success 'diff attribute and --no-ext-diff' '
git diff --no-ext-diff |
grep "^diff --git a/file b/file"
'

test_expect_success 'diff attribute' '
git config --unset diff.parrot.command &&
Expand All @@ -94,6 +108,13 @@ test_expect_success 'diff attribute should apply only to diff' '
'

test_expect_success 'diff attribute and --no-ext-diff' '
git diff --no-ext-diff |
grep "^diff --git a/file b/file"
'

test_expect_success 'no diff with -diff' '
echo >.gitattributes "file -diff" &&
git diff | grep Binary
Expand Down

0 comments on commit 61af494

Please sign in to comment.