diff: pass o->use_color directly to fill_metainfo()

We pass the use_color parameter of fill_metainfo() as a strict boolean, using: want_color(o->use_color) && !pgm to derive its value. But then inside the function, we pass it to diff_get_color(), which expects one of the git_colorbool enum values, and so feeds it to want_color() again. Even though want_color() produces a strict 0/1 boolean, this doesn't produce wrong results because want_color() is idempotent. Since GIT_COLOR_ALWAYS and NEVER are defined as 1 and 0, and because want_color() passes through those values, evaluating "want_color(foo)" and "want_color(want_color(foo))" will return the same result. But as part of a longer strategy to align the types we use for storing these values, let's pass through the colorbool directly. To handle the "&&" case here, we'll convert the presence of "pgm" into "NEVER", which arguably makes the intent of the code more clear anyway. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Sep 16, 2025 at 16:20 UTC 12df3c2e99f0692155c8ad083c6dba8c8ee30033
1 file changed +1 -1
diff.c
+1 -1
@@ -4580,7 +4580,7 @@ static void run_diff_cmd(const struct external_diff *pgm,
4580 */
4581 fill_metainfo(msg, name, other, one, two, o, p,
4582 &must_show_header,
4583 - want_color(o->use_color) && !pgm);
4583 + pgm ? GIT_COLOR_NEVER : o->use_color);
4584 xfrm_msg = msg->len ? msg->buf : NULL;
4585 }
4586