Re: diff: --quiet does not imply --exit-code if --diff-filter is present
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:51:21
Jeff King [off-list ref] writes:
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.
Thanks; a natural question is if we need the same for diff-index, then.
quoted hunk
diff --git a/tree-diff.c b/tree-diff.c index 7a79660..3d08f78 100644 --- a/tree-diff.c +++ b/tree-diff.c@@ -143,6 +143,7 @@ int diff_tree(struct tree_desc *t1, struct tree_desc *t2, for (;;) { if (DIFF_OPT_TST(opt, QUICK) && + !opt->filter && DIFF_OPT_TST(opt, HAS_CHANGES)) break; if (opt->pathspec.nr) {
We probably want to have a helper in diff.c that does
int diff_can_quit_early(struct diff_options *opt)
{
return (DIFF_OPT_TST(opt, QUICK) &&
!opt->filter &&
DIFF_OPT_TST(opt, HAS_CHANGES));
}
It is possible for us to later add new diffcore transformations that need
a similar "do not stop feeding early, as results may be filtered".