mirror of
https://github.com/git/git.git
synced 2025-03-24 07:50:11 +00:00
diff_tree: disable QUICK optimization with diff filter
We stop looking for changes early with QUICK, so our diff queue contains only a subset of the changes. However, we don't apply diff filters until later; it will appear at that point as though there are no changes matching our filter, when in reality we simply didn't keep looking for changes long enough. Commit 2cfe8a6 (diff --quiet: disable optimization when --diff-filter=X is used, 2011-03-16) fixes this in some cases by disabling the optimization when a filter is present. However, it only tweaked run_diff_files, missing the similar case in diff_tree. Thus the fix worked only for diffing the working tree and index, but not between trees. Noticed by Yasushi SHOJI. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2cfe8a68cc
commit
af7b41c923
@ -67,4 +67,9 @@ test_expect_success 'diff-files --diff-filter --quiet' '
|
||||
test_must_fail git diff-files --diff-filter=M --quiet
|
||||
'
|
||||
|
||||
test_expect_success 'diff-tree --diff-filter --quiet' '
|
||||
git commit -a -m "worktree state" &&
|
||||
test_must_fail git diff-tree --diff-filter=M --quiet HEAD^ HEAD
|
||||
'
|
||||
|
||||
test_done
|
||||
|
@ -287,6 +287,7 @@ int diff_tree(struct tree_desc *t1, struct tree_desc *t2, const char *base, stru
|
||||
|
||||
for (;;) {
|
||||
if (DIFF_OPT_TST(opt, QUICK) &&
|
||||
!opt->filter &&
|
||||
DIFF_OPT_TST(opt, HAS_CHANGES))
|
||||
break;
|
||||
if (opt->nr_paths) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user