diff: refactor output of incomplete line

Create a helper function that reacts to "\ No newline at the end of file" in preparation for unifying the incomplete line handling in the code path that handles xdiff output and the code path that bypasses xdiff and produces a complete-rewrite patch. Currently the output from the DIFF_SYMBOL_CONTEXT_INCOMPLETE case still (ab)uses the same code as what is used for context lines, but that would change in a later step where we introduce support to treat an incomplete line as a whitespace error. Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Nov 12, 2025 at 14:02 UTC 29228cbdc5f8a80b1f61c7cc209ba8e3714cc38e
1 file changed +12 -2
diff.c
+12 -2
@@ -1379,6 +1379,10 @@ static void emit_diff_symbol_from_struct(struct diff_options *o,
1379 emit_line(o, "", "", line, len);
1380 break;
1381 case DIFF_SYMBOL_CONTEXT_INCOMPLETE:
1382 + set = diff_get_color_opt(o, DIFF_CONTEXT);
1383 + reset = diff_get_color_opt(o, DIFF_RESET);
1384 + emit_line(o, set, reset, line, len);
1385 + break;
1386 case DIFF_SYMBOL_CONTEXT_MARKER:
1387 context = diff_get_color_opt(o, DIFF_CONTEXT);
1388 reset = diff_get_color_opt(o, DIFF_RESET);
@@ -1668,6 +1672,13 @@ static void emit_context_line(struct emit_callback *ecbdata,
1672 emit_diff_symbol(ecbdata->opt, DIFF_SYMBOL_CONTEXT, line, len, flags);
1673 }
1674
1675 +static void emit_incomplete_line_marker(struct emit_callback *ecbdata,
1676 + const char *line, int len)
1677 +{
1678 + emit_diff_symbol(ecbdata->opt, DIFF_SYMBOL_CONTEXT_INCOMPLETE,
1679 + line, len, 0);
1680 +}
1681 +
1682 static void emit_hunk_header(struct emit_callback *ecbdata,
1683 const char *line, int len)
1684 {
@@ -2437,8 +2448,7 @@ static int fn_out_consume(void *priv, char *line, unsigned long len)
2448 ecbdata->last_line_kind);
2449 }
2450 ecbdata->lno_in_preimage++;
2440 - emit_diff_symbol(o, DIFF_SYMBOL_CONTEXT_INCOMPLETE,
2441 - line, len, 0);
2451 + emit_incomplete_line_marker(ecbdata, line, len);
2452 break;
2453 default:
2454 BUG("fn_out_consume: unknown line '%s'", line);