Merge branch 'jc/maint-1.6.0-blank-at-eof' into jc/maint-blank-at-eof
* jc/maint-1.6.0-blank-at-eof: diff -B: colour whitespace errors
This commit is contained in:
commit
d91ba8fa88
67
diff.c
67
diff.c
@ -385,26 +385,36 @@ static void print_line_count(FILE *file, int count)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void copy_file_with_prefix(FILE *file,
|
static void emit_rewrite_lines(struct emit_callback *ecb,
|
||||||
int prefix, const char *data, int size,
|
int prefix, const char *data, int size)
|
||||||
const char *set, const char *reset)
|
|
||||||
{
|
{
|
||||||
int ch, nl_just_seen = 1;
|
const char *endp = NULL;
|
||||||
while (0 < size--) {
|
static const char *nneof = " No newline at end of file\n";
|
||||||
ch = *data++;
|
const char *old = diff_get_color(ecb->color_diff, DIFF_FILE_OLD);
|
||||||
if (nl_just_seen) {
|
const char *reset = diff_get_color(ecb->color_diff, DIFF_RESET);
|
||||||
fputs(set, file);
|
|
||||||
putc(prefix, file);
|
while (0 < size) {
|
||||||
|
int len;
|
||||||
|
|
||||||
|
endp = memchr(data, '\n', size);
|
||||||
|
len = endp ? (endp - data + 1) : size;
|
||||||
|
if (prefix != '+') {
|
||||||
|
ecb->lno_in_preimage++;
|
||||||
|
emit_line_0(ecb->file, old, reset, '-',
|
||||||
|
data, len);
|
||||||
|
} else {
|
||||||
|
ecb->lno_in_postimage++;
|
||||||
|
emit_add_line(reset, ecb, data, len);
|
||||||
}
|
}
|
||||||
if (ch == '\n') {
|
size -= len;
|
||||||
nl_just_seen = 1;
|
data += len;
|
||||||
fputs(reset, file);
|
}
|
||||||
} else
|
if (!endp) {
|
||||||
nl_just_seen = 0;
|
const char *plain = diff_get_color(ecb->color_diff,
|
||||||
putc(ch, file);
|
DIFF_PLAIN);
|
||||||
|
emit_line_0(ecb->file, plain, reset, '\\',
|
||||||
|
nneof, strlen(nneof));
|
||||||
}
|
}
|
||||||
if (!nl_just_seen)
|
|
||||||
fprintf(file, "%s\n\\ No newline at end of file\n", reset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void emit_rewrite_diff(const char *name_a,
|
static void emit_rewrite_diff(const char *name_a,
|
||||||
@ -420,13 +430,12 @@ static void emit_rewrite_diff(const char *name_a,
|
|||||||
const char *name_a_tab, *name_b_tab;
|
const char *name_a_tab, *name_b_tab;
|
||||||
const char *metainfo = diff_get_color(color_diff, DIFF_METAINFO);
|
const char *metainfo = diff_get_color(color_diff, DIFF_METAINFO);
|
||||||
const char *fraginfo = diff_get_color(color_diff, DIFF_FRAGINFO);
|
const char *fraginfo = diff_get_color(color_diff, DIFF_FRAGINFO);
|
||||||
const char *old = diff_get_color(color_diff, DIFF_FILE_OLD);
|
|
||||||
const char *new = diff_get_color(color_diff, DIFF_FILE_NEW);
|
|
||||||
const char *reset = diff_get_color(color_diff, DIFF_RESET);
|
const char *reset = diff_get_color(color_diff, DIFF_RESET);
|
||||||
static struct strbuf a_name = STRBUF_INIT, b_name = STRBUF_INIT;
|
static struct strbuf a_name = STRBUF_INIT, b_name = STRBUF_INIT;
|
||||||
const char *a_prefix, *b_prefix;
|
const char *a_prefix, *b_prefix;
|
||||||
const char *data_one, *data_two;
|
const char *data_one, *data_two;
|
||||||
size_t size_one, size_two;
|
size_t size_one, size_two;
|
||||||
|
struct emit_callback ecbdata;
|
||||||
|
|
||||||
if (diff_mnemonic_prefix && DIFF_OPT_TST(o, REVERSE_DIFF)) {
|
if (diff_mnemonic_prefix && DIFF_OPT_TST(o, REVERSE_DIFF)) {
|
||||||
a_prefix = o->b_prefix;
|
a_prefix = o->b_prefix;
|
||||||
@ -467,6 +476,22 @@ static void emit_rewrite_diff(const char *name_a,
|
|||||||
size_two = two->size;
|
size_two = two->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(&ecbdata, 0, sizeof(ecbdata));
|
||||||
|
ecbdata.color_diff = color_diff;
|
||||||
|
ecbdata.found_changesp = &o->found_changes;
|
||||||
|
ecbdata.ws_rule = whitespace_rule(name_b ? name_b : name_a);
|
||||||
|
ecbdata.file = o->file;
|
||||||
|
if (ecbdata.ws_rule & WS_BLANK_AT_EOF) {
|
||||||
|
mmfile_t mf1, mf2;
|
||||||
|
mf1.ptr = (char *)data_one;
|
||||||
|
mf2.ptr = (char *)data_two;
|
||||||
|
mf1.size = size_one;
|
||||||
|
mf2.size = size_two;
|
||||||
|
check_blank_at_eof(&mf1, &mf2, &ecbdata);
|
||||||
|
}
|
||||||
|
ecbdata.lno_in_preimage = 1;
|
||||||
|
ecbdata.lno_in_postimage = 1;
|
||||||
|
|
||||||
lc_a = count_lines(data_one, size_one);
|
lc_a = count_lines(data_one, size_one);
|
||||||
lc_b = count_lines(data_two, size_two);
|
lc_b = count_lines(data_two, size_two);
|
||||||
fprintf(o->file,
|
fprintf(o->file,
|
||||||
@ -478,9 +503,9 @@ static void emit_rewrite_diff(const char *name_a,
|
|||||||
print_line_count(o->file, lc_b);
|
print_line_count(o->file, lc_b);
|
||||||
fprintf(o->file, " @@%s\n", reset);
|
fprintf(o->file, " @@%s\n", reset);
|
||||||
if (lc_a)
|
if (lc_a)
|
||||||
copy_file_with_prefix(o->file, '-', data_one, size_one, old, reset);
|
emit_rewrite_lines(&ecbdata, '-', data_one, size_one);
|
||||||
if (lc_b)
|
if (lc_b)
|
||||||
copy_file_with_prefix(o->file, '+', data_two, size_two, new, reset);
|
emit_rewrite_lines(&ecbdata, '+', data_two, size_two);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct diff_words_buffer {
|
struct diff_words_buffer {
|
||||||
|
Loading…
Reference in New Issue
Block a user