Color is WIP, I just make space for a different case. Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- diff.c | 26 ++++++++++++++++++++++++++ diff.h | 4 +++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/diff.c b/diff.c index 534c12e..57d435c 100644 --- a/diff.c +++ b/diff.c @@ -52,6 +52,8 @@ static char diff_colors[][COLOR_MAXLEN] = { GIT_COLOR_YELLOW, /* COMMIT */ GIT_COLOR_BG_RED, /* WHITESPACE */ GIT_COLOR_NORMAL, /* FUNCINFO */ + GIT_COLOR_BLUE, /* NEW DUPLICATE */ + GIT_COLOR_CYAN, /* OLD DUPLICATE */ }; static int parse_diff_color_slot(const char *var) @@ -541,6 +543,14 @@ static void emit_add_line(const char *reset, DIFF_FILE_NEW, WSEH_NEW, '+'); } +static void emit_add_line_dup(const char *reset, + struct emit_callback *ecbdata, + const char *line, int len) +{ + emit_line_checked(reset, ecbdata, line, len, + DIFF_FILE_DUPLICATE_NEW, WSEH_NEW, '+'); +} + static void emit_del_line(const char *reset, struct emit_callback *ecbdata, const char *line, int len) @@ -549,6 +559,14 @@ static void emit_del_line(const char *reset, DIFF_FILE_OLD, WSEH_OLD, '-'); } +static void emit_del_line_dup(const char *reset, + struct emit_callback *ecbdata, + const char *line, int len) +{ + emit_line_checked(reset, ecbdata, line, len, + DIFF_FILE_DUPLICATE_OLD, WSEH_OLD, '-'); +} + static void emit_context_line(const char *reset, struct emit_callback *ecbdata, const char *line, int len) @@ -1300,6 +1318,10 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) } switch (line[0]) { + case '*': + ecbdata->lno_in_postimage++; + emit_add_line_dup(reset, ecbdata, line + 1, len - 1); + break; case '+': ecbdata->lno_in_postimage++; emit_add_line(reset, ecbdata, line + 1, len - 1); @@ -1308,6 +1330,10 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) ecbdata->lno_in_preimage++; emit_del_line(reset, ecbdata, line + 1, len - 1); break; + case '~': + ecbdata->lno_in_preimage++; + emit_del_line_dup(reset, ecbdata, line + 1, len - 1); + break; case ' ': ecbdata->lno_in_postimage++; ecbdata->lno_in_preimage++; diff --git a/diff.h b/diff.h index 7883729..d500f0e 100644 --- a/diff.h +++ b/diff.h @@ -189,7 +189,9 @@ enum color_diff { DIFF_FILE_NEW = 5, DIFF_COMMIT = 6, DIFF_WHITESPACE = 7, - DIFF_FUNCINFO = 8 + DIFF_FUNCINFO = 8, + DIFF_FILE_DUPLICATE_NEW = 9, + DIFF_FILE_DUPLICATE_OLD = 10 }; const char *diff_get_color(int diff_use_color, enum color_diff ix); #define diff_get_color_opt(o, ix) \ -- 2.10.0.rc2.23.gf336a1a.dirty