Skip to content

Commit

Permalink
diff --quiet: disable optimization when --diff-filter=X is used
Browse files Browse the repository at this point in the history
The code notices that the caller does not want any detail of the changes
and only wants to know if there is a change or not by specifying --quiet.
And it breaks out of the loop when it knows it already found any change.

When you have a post-process filter (e.g. --diff-filter), however, the
path we found to be different in the previous round and set HAS_CHANGES
bit may end up being uninteresting, and there may be no output at the end.
The optimization needs to be disabled for such case.

Note that the f245194 (diff: change semantics of "ignore whitespace"
options, 2009-05-22) already disables this optimization by refraining
from setting HAS_CHANGES when post-process filters that need to inspect
the contents of the files (e.g. -S, -w) in diff_change() function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
gitster committed Mar 16, 2011
1 parent 90b1994 commit 2cfe8a6
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
3 changes: 2 additions & 1 deletion diff-lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
int changed;

if (DIFF_OPT_TST(&revs->diffopt, QUICK) &&
DIFF_OPT_TST(&revs->diffopt, HAS_CHANGES))
!revs->diffopt.filter &&
DIFF_OPT_TST(&revs->diffopt, HAS_CHANGES))
break;

if (!ce_path_match(ce, revs->prune_data))
Expand Down
7 changes: 7 additions & 0 deletions t/t4037-whitespace-status.sh
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,11 @@ test_expect_success 'diff-files -b -p --exit-code' '
git diff-files -b -p --exit-code
'

test_expect_success 'diff-files --diff-filter --quiet' '
git reset --hard &&
rm a/d &&
echo x >>b/e &&
test_must_fail git diff-files --diff-filter=M --quiet
'

test_done

0 comments on commit 2cfe8a6

Please sign in to comment.