On Mon, Aug 21, 2023 at 05:08:05PM -0400, Jeff King wrote: > On Mon, Aug 21, 2023 at 05:00:58PM -0400, Jeff King wrote: > > > Alternatively, we could put it in the caller, like so: > > > > diff --git a/diff.c b/diff.c > > index 78f4e7518f..e7281e75eb 100644 > > --- a/diff.c > > +++ b/diff.c > > @@ -6528,6 +6528,7 @@ void diff_flush(struct diff_options *options) > > if (check_pair_status(p)) > > flush_one_pair(p, options); > > } > > + options->found_changes = !!q->nr; > > separator++; > > } > > > > > > which matches the diffstat technique (I almost thought we could share > > the code, but for the diffstat we are counting what ends up in the > > diffstat struct; it does not clean out the original diff_queue when it > > sees a noop pair). > > > > I don't see a real reason to prefer one over the other. > > Actually, on second look these are not quite the same. Yours only > triggers if check_pair_status() is true. So something like > --diff-filter should affect both output and exit code. Yours gets that > right, and mine does not. Sorry for the noise. :) Sorry, I'm dumb again. That is not where diff-filter is handled (it is handled by diffcore, duh). check_pair_status() is only checking for DIFF_STATUS_UNKNOWN. I'm not sure when that would ever be set, but it seems like we should be matching the "if it is output" logic, which is what you get by calling flush_one_pair(). So yours is definitely preferable, even if I don't understand the possible differences. ;) -Peff