diff.c: emit_diff_symbol learns DIFF_SYMBOL_HEADER
The header is constructed lazily including line breaks, so just emit the raw string as is. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
3ee8b7bfe4
commit
a29b0a13bd
28
diff.c
28
diff.c
@ -561,6 +561,7 @@ static void emit_line(struct diff_options *o, const char *set, const char *reset
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum diff_symbol {
|
enum diff_symbol {
|
||||||
|
DIFF_SYMBOL_HEADER,
|
||||||
DIFF_SYMBOL_FILEPAIR_PLUS,
|
DIFF_SYMBOL_FILEPAIR_PLUS,
|
||||||
DIFF_SYMBOL_FILEPAIR_MINUS,
|
DIFF_SYMBOL_FILEPAIR_MINUS,
|
||||||
DIFF_SYMBOL_WORDS_PORCELAIN,
|
DIFF_SYMBOL_WORDS_PORCELAIN,
|
||||||
@ -689,6 +690,9 @@ static void emit_diff_symbol(struct diff_options *o, enum diff_symbol s,
|
|||||||
line, reset,
|
line, reset,
|
||||||
strchr(line, ' ') ? "\t" : "");
|
strchr(line, ' ') ? "\t" : "");
|
||||||
break;
|
break;
|
||||||
|
case DIFF_SYMBOL_HEADER:
|
||||||
|
fprintf(o->file, "%s", line);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
die("BUG: unknown diff symbol");
|
die("BUG: unknown diff symbol");
|
||||||
}
|
}
|
||||||
@ -1385,7 +1389,8 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
|
|||||||
o->found_changes = 1;
|
o->found_changes = 1;
|
||||||
|
|
||||||
if (ecbdata->header) {
|
if (ecbdata->header) {
|
||||||
fprintf(o->file, "%s", ecbdata->header->buf);
|
emit_diff_symbol(o, DIFF_SYMBOL_HEADER,
|
||||||
|
ecbdata->header->buf, ecbdata->header->len, 0);
|
||||||
strbuf_reset(ecbdata->header);
|
strbuf_reset(ecbdata->header);
|
||||||
ecbdata->header = NULL;
|
ecbdata->header = NULL;
|
||||||
}
|
}
|
||||||
@ -2519,7 +2524,8 @@ static void builtin_diff(const char *name_a,
|
|||||||
if (complete_rewrite &&
|
if (complete_rewrite &&
|
||||||
(textconv_one || !diff_filespec_is_binary(one)) &&
|
(textconv_one || !diff_filespec_is_binary(one)) &&
|
||||||
(textconv_two || !diff_filespec_is_binary(two))) {
|
(textconv_two || !diff_filespec_is_binary(two))) {
|
||||||
fprintf(o->file, "%s", header.buf);
|
emit_diff_symbol(o, DIFF_SYMBOL_HEADER,
|
||||||
|
header.buf, header.len, 0);
|
||||||
strbuf_reset(&header);
|
strbuf_reset(&header);
|
||||||
emit_rewrite_diff(name_a, name_b, one, two,
|
emit_rewrite_diff(name_a, name_b, one, two,
|
||||||
textconv_one, textconv_two, o);
|
textconv_one, textconv_two, o);
|
||||||
@ -2529,7 +2535,8 @@ static void builtin_diff(const char *name_a,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (o->irreversible_delete && lbl[1][0] == '/') {
|
if (o->irreversible_delete && lbl[1][0] == '/') {
|
||||||
fprintf(o->file, "%s", header.buf);
|
emit_diff_symbol(o, DIFF_SYMBOL_HEADER, header.buf,
|
||||||
|
header.len, 0);
|
||||||
strbuf_reset(&header);
|
strbuf_reset(&header);
|
||||||
goto free_ab_and_return;
|
goto free_ab_and_return;
|
||||||
} else if (!DIFF_OPT_TST(o, TEXT) &&
|
} else if (!DIFF_OPT_TST(o, TEXT) &&
|
||||||
@ -2540,10 +2547,13 @@ static void builtin_diff(const char *name_a,
|
|||||||
!DIFF_OPT_TST(o, BINARY)) {
|
!DIFF_OPT_TST(o, BINARY)) {
|
||||||
if (!oidcmp(&one->oid, &two->oid)) {
|
if (!oidcmp(&one->oid, &two->oid)) {
|
||||||
if (must_show_header)
|
if (must_show_header)
|
||||||
fprintf(o->file, "%s", header.buf);
|
emit_diff_symbol(o, DIFF_SYMBOL_HEADER,
|
||||||
|
header.buf, header.len,
|
||||||
|
0);
|
||||||
goto free_ab_and_return;
|
goto free_ab_and_return;
|
||||||
}
|
}
|
||||||
fprintf(o->file, "%s", header.buf);
|
emit_diff_symbol(o, DIFF_SYMBOL_HEADER,
|
||||||
|
header.buf, header.len, 0);
|
||||||
fprintf(o->file, "%sBinary files %s and %s differ\n",
|
fprintf(o->file, "%sBinary files %s and %s differ\n",
|
||||||
line_prefix, lbl[0], lbl[1]);
|
line_prefix, lbl[0], lbl[1]);
|
||||||
goto free_ab_and_return;
|
goto free_ab_and_return;
|
||||||
@ -2554,10 +2564,11 @@ static void builtin_diff(const char *name_a,
|
|||||||
if (mf1.size == mf2.size &&
|
if (mf1.size == mf2.size &&
|
||||||
!memcmp(mf1.ptr, mf2.ptr, mf1.size)) {
|
!memcmp(mf1.ptr, mf2.ptr, mf1.size)) {
|
||||||
if (must_show_header)
|
if (must_show_header)
|
||||||
fprintf(o->file, "%s", header.buf);
|
emit_diff_symbol(o, DIFF_SYMBOL_HEADER,
|
||||||
|
header.buf, header.len, 0);
|
||||||
goto free_ab_and_return;
|
goto free_ab_and_return;
|
||||||
}
|
}
|
||||||
fprintf(o->file, "%s", header.buf);
|
emit_diff_symbol(o, DIFF_SYMBOL_HEADER, header.buf, header.len, 0);
|
||||||
strbuf_reset(&header);
|
strbuf_reset(&header);
|
||||||
if (DIFF_OPT_TST(o, BINARY))
|
if (DIFF_OPT_TST(o, BINARY))
|
||||||
emit_binary_diff(o->file, &mf1, &mf2, line_prefix);
|
emit_binary_diff(o->file, &mf1, &mf2, line_prefix);
|
||||||
@ -2575,7 +2586,8 @@ static void builtin_diff(const char *name_a,
|
|||||||
const struct userdiff_funcname *pe;
|
const struct userdiff_funcname *pe;
|
||||||
|
|
||||||
if (must_show_header) {
|
if (must_show_header) {
|
||||||
fprintf(o->file, "%s", header.buf);
|
emit_diff_symbol(o, DIFF_SYMBOL_HEADER,
|
||||||
|
header.buf, header.len, 0);
|
||||||
strbuf_reset(&header);
|
strbuf_reset(&header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user