Thread (2 messages) 2 messages, 2 authors, 2025-08-07

Re: [PATCH v3] diff: ensure consistent diff behavior with ignore options

From: Lidong Yan <hidden>
Date: 2025-08-07 01:39:36

Junio C Hamano [off-list ref] writes:
Lidong Yan [off-list ref] writes:
quoted
+static int quick_consume(void *priv, char *line, unsigned long len)
+{
+ struct emit_callback *ecbdata = priv;
+ struct diff_options *o = ecbdata->opt;
+
+ o->found_changes = 1;
+ return 1;
+}
"make DEVELOPER=YesPlease" would not be very happy, without

-static int quick_consume(void *priv, char *line, unsigned long len)
+static int quick_consume(void *priv, char *line UNUSED, unsigned long len UNUSED)
(I accidentally sent an unfinished email to Junio. Sorry about that.)
Another a good thing to test before commit. Thanks for the reminder.
quoted
static void diff_flush_stat(struct diff_filepair *p, struct diff_options *o,
   struct diffstat_t *diffstat)
{
@@ -6778,7 +6810,19 @@ void diff_flush(struct diff_options *options)
    DIFF_FORMAT_CHECKDIFF)) {
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
- if (check_pair_status(p))
+ int need_flush = 1;
+
+ if (!check_pair_status(p))
+ continue;
+
+ if (options->flags.diff_from_contents) {
+ if (diff_flush_patch_quiet(p, options))
+ need_flush = 1;
+ else
+ need_flush = 0;
+ }
+
+ if (need_flush)
flush_one_pair(p, options);
}
I am having a hard time understanding the logic in this loop.  Is it
equivalent to the following loop, and ...

for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];

if (!check_pair_status(p))
continue;
if (options->flags.diff_from_contents &&
   !diff_flush_patch_quietly(p, options))
continue; /* no changes */

flush_one_pair(p, options);
}

... if so, isn't the above rewrite easier to follow?
Yes, I was being stupid again. That’s obviously better.

Thanks, will send v4 soon.
Lidong
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help