From: Junio C Hamano Date: Wed, 15 Jul 2015 19:30:14 +0000 (-0700) Subject: Merge branch 'jc/diff-ws-error-highlight' X-Git-Tag: v2.5.0-rc3~6 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/abecddea25e9c39857b963c8a0cffbbdc135caa9?ds=inline;hp=-c Merge branch 'jc/diff-ws-error-highlight' A hotfix to a new feature in 2.5.0-rc. * jc/diff-ws-error-highlight: diff: parse ws-error-highlight option more strictly --- abecddea25e9c39857b963c8a0cffbbdc135caa9 diff --combined diff.c index 87b16d5613,8af01f149d..0f17ec5506 --- a/diff.c +++ b/diff.c @@@ -42,7 -42,7 +42,7 @@@ static long diff_algorithm static char diff_colors[][COLOR_MAXLEN] = { GIT_COLOR_RESET, - GIT_COLOR_NORMAL, /* PLAIN */ + GIT_COLOR_NORMAL, /* CONTEXT */ GIT_COLOR_BOLD, /* METAINFO */ GIT_COLOR_CYAN, /* FRAGINFO */ GIT_COLOR_RED, /* OLD */ @@@ -54,8 -54,8 +54,8 @@@ static int parse_diff_color_slot(const char *var) { - if (!strcasecmp(var, "plain")) - return DIFF_PLAIN; + if (!strcasecmp(var, "context") || !strcasecmp(var, "plain")) + return DIFF_CONTEXT; if (!strcasecmp(var, "meta")) return DIFF_METAINFO; if (!strcasecmp(var, "frag")) @@@ -528,13 -528,13 +528,13 @@@ static void emit_context_line(const cha const char *line, int len) { emit_line_checked(reset, ecbdata, line, len, - DIFF_PLAIN, WSEH_CONTEXT, ' '); + DIFF_CONTEXT, WSEH_CONTEXT, ' '); } static void emit_hunk_header(struct emit_callback *ecbdata, const char *line, int len) { - const char *plain = diff_get_color(ecbdata->color_diff, DIFF_PLAIN); + const char *context = diff_get_color(ecbdata->color_diff, DIFF_CONTEXT); const char *frag = diff_get_color(ecbdata->color_diff, DIFF_FRAGINFO); const char *func = diff_get_color(ecbdata->color_diff, DIFF_FUNCINFO); const char *reset = diff_get_color(ecbdata->color_diff, DIFF_RESET); @@@ -551,7 -551,7 +551,7 @@@ if (len < 10 || memcmp(line, atat, 2) || !(ep = memmem(line + 2, len - 2, atat, 2))) { - emit_line(ecbdata->opt, plain, reset, line, len); + emit_line(ecbdata->opt, context, reset, line, len); return; } ep += 2; /* skip over @@ */ @@@ -573,7 -573,7 +573,7 @@@ if (*ep != ' ' && *ep != '\t') break; if (ep != cp) { - strbuf_addstr(&msgbuf, plain); + strbuf_addstr(&msgbuf, context); strbuf_add(&msgbuf, cp, ep - cp); strbuf_addstr(&msgbuf, reset); } @@@ -654,10 -654,10 +654,10 @@@ static void emit_rewrite_lines(struct e data += len; } if (!endp) { - const char *plain = diff_get_color(ecb->color_diff, - DIFF_PLAIN); + const char *context = diff_get_color(ecb->color_diff, + DIFF_CONTEXT); putc('\n', ecb->opt->file); - emit_line_0(ecb->opt, plain, reset, '\\', + emit_line_0(ecb->opt, context, reset, '\\', nneof, strlen(nneof)); } } @@@ -1117,7 -1117,7 +1117,7 @@@ static void init_diff_words_data(struc struct diff_words_style *st = ecbdata->diff_words->style; st->old.color = diff_get_color_opt(o, DIFF_FILE_OLD); st->new.color = diff_get_color_opt(o, DIFF_FILE_NEW); - st->ctx.color = diff_get_color_opt(o, DIFF_PLAIN); + st->ctx.color = diff_get_color_opt(o, DIFF_CONTEXT); } } @@@ -1193,7 -1193,7 +1193,7 @@@ static void fn_out_consume(void *priv, { struct emit_callback *ecbdata = priv; const char *meta = diff_get_color(ecbdata->color_diff, DIFF_METAINFO); - const char *plain = diff_get_color(ecbdata->color_diff, DIFF_PLAIN); + const char *context = diff_get_color(ecbdata->color_diff, DIFF_CONTEXT); const char *reset = diff_get_color(ecbdata->color_diff, DIFF_RESET); struct diff_options *o = ecbdata->opt; const char *line_prefix = diff_line_prefix(o); @@@ -1264,7 -1264,7 +1264,7 @@@ } diff_words_flush(ecbdata); if (ecbdata->diff_words->type == DIFF_WORDS_PORCELAIN) { - emit_line(ecbdata->opt, plain, reset, line, len); + emit_line(ecbdata->opt, context, reset, line, len); fputs("~\n", ecbdata->opt->file); } else { /* @@@ -1276,7 -1276,7 +1276,7 @@@ line++; len--; } - emit_line(ecbdata->opt, plain, reset, line, len); + emit_line(ecbdata->opt, context, reset, line, len); } return; } @@@ -1299,7 -1299,7 +1299,7 @@@ /* incomplete line at the end */ ecbdata->lno_in_preimage++; emit_line(ecbdata->opt, - diff_get_color(ecbdata->color_diff, DIFF_PLAIN), + diff_get_color(ecbdata->color_diff, DIFF_CONTEXT), reset, line, len); break; } @@@ -2134,6 -2134,7 +2134,6 @@@ static unsigned char *deflate_it(char * unsigned char *deflated; git_zstream stream; - memset(&stream, 0, sizeof(stream)); git_deflate_init(&stream, zlib_compression_level); bound = git_deflate_bound(&stream, size); deflated = xmalloc(bound); @@@ -3653,7 -3654,12 +3653,12 @@@ static void enable_patch_output(int *fm static int parse_one_token(const char **arg, const char *token) { - return skip_prefix(*arg, token, arg) && (!**arg || **arg == ','); + const char *rest; + if (skip_prefix(*arg, token, &rest) && (!*rest || *rest == ',')) { + *arg = rest; + return 1; + } + return 0; } static int parse_ws_error_highlight(struct diff_options *opt, const char *arg) @@@ -4618,7 -4624,7 +4623,7 @@@ void diff_flush(struct diff_options *op show_stats(&diffstat, options); if (output_format & DIFF_FORMAT_SHORTSTAT) show_shortstats(&diffstat, options); - if (output_format & DIFF_FORMAT_DIRSTAT) + if (output_format & DIFF_FORMAT_DIRSTAT && dirstat_by_line) show_dirstat_by_line(&diffstat, options); free_diffstat_info(&diffstat); separator++;