On 06/19, Stefan Beller wrote:
> Ævar asked for it, this is how you would do it.
> (plus documentation, tests, CLI knobs, options)
> 
> Signed-off-by: Stefan Beller <sbel...@google.com>
> ---
>  diff.c | 15 +++++++++++----
>  diff.h |  2 ++
>  2 files changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/diff.c b/diff.c
> index 7756f7610c..61caa057ff 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -997,6 +997,7 @@ static void emit_diff_symbol_from_struct(struct 
> diff_options *o,
>       static const char *nneof = " No newline at end of file\n";
>       const char *context, *reset, *set, *meta, *fraginfo;
>       struct strbuf sb = STRBUF_INIT;
> +     int sign;

should this be a char instead of an int?

>  
>       enum diff_symbol s = eds->s;
>       const char *line = eds->line;
> @@ -1058,8 +1059,11 @@ static void emit_diff_symbol_from_struct(struct 
> diff_options *o,
>               default:
>                       set = diff_get_color_opt(o, DIFF_FILE_NEW);
>               }
> +             sign = '+';
> +             if (flags & DIFF_SYMBOL_MOVED_LINE && o->machine_readable_moves)
> +                     sign = '*';
>               reset = diff_get_color_opt(o, DIFF_RESET);
> -             emit_line_ws_markup(o, set, reset, line, len, '+',
> +             emit_line_ws_markup(o, set, reset, line, len, sign,
>                                   flags & DIFF_SYMBOL_CONTENT_WS_MASK,
>                                   flags & DIFF_SYMBOL_CONTENT_BLANK_LINE_EOF);
>               break;
> @@ -1086,8 +1090,11 @@ static void emit_diff_symbol_from_struct(struct 
> diff_options *o,
>               default:
>                       set = diff_get_color_opt(o, DIFF_FILE_OLD);
>               }
> +             sign = '-';
> +             if (flags & DIFF_SYMBOL_MOVED_LINE && o->machine_readable_moves)
> +                     sign = '_';
>               reset = diff_get_color_opt(o, DIFF_RESET);
> -             emit_line_ws_markup(o, set, reset, line, len, '-',
> +             emit_line_ws_markup(o, set, reset, line, len, sign,
>                                   flags & DIFF_SYMBOL_CONTENT_WS_MASK, 0);
>               break;
>       case DIFF_SYMBOL_WORDS_PORCELAIN:
> @@ -5475,7 +5482,7 @@ static void diff_flush_patch_all_file_pairs(struct 
> diff_options *o)
>       static struct emitted_diff_symbols esm = EMITTED_DIFF_SYMBOLS_INIT;
>       struct diff_queue_struct *q = &diff_queued_diff;
>  
> -     if (o->color_moved)
> +     if (o->color_moved || o->machine_readable_moves)
>               o->emitted_symbols = &esm;
>  
>       for (i = 0; i < q->nr; i++) {
> @@ -5485,7 +5492,7 @@ static void diff_flush_patch_all_file_pairs(struct 
> diff_options *o)
>       }
>  
>       if (o->emitted_symbols) {
> -             if (o->color_moved) {
> +             if (o->color_moved || o->machine_readable_moves) {
>                       struct hashmap add_lines, del_lines;
>                       unsigned ignore_ws = DIFF_XDL_TST(o, IGNORE_WHITESPACE);
>  
> diff --git a/diff.h b/diff.h
> index 98abd75521..b6c4d7ab0f 100644
> --- a/diff.h
> +++ b/diff.h
> @@ -194,6 +194,8 @@ struct diff_options {
>               COLOR_MOVED_ZEBRA = 2,
>               COLOR_MOVED_ZEBRA_DIM = 3,
>       } color_moved;
> +
> +     int machine_readable_moves;
>  };
>  
>  void diff_emit_submodule_del(struct diff_options *o, const char *line);
> -- 
> 2.12.2.575.gb14f27f917
> 

-- 
Brandon Williams

Reply via email to