All lines that use emit_line_0 multiple times per line, are combined
into a single call to emit_line_0, making use of the 'set' argument.

Signed-off-by: Stefan Beller <sbel...@google.com>
---
 diff.c | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/diff.c b/diff.c
index a36ed92c54c..fdad7ffdd77 100644
--- a/diff.c
+++ b/diff.c
@@ -583,10 +583,7 @@ static void emit_line_0(struct diff_options *o,
        int nofirst;
        FILE *file = o->file;
 
-       if (first)
-               fputs(diff_line_prefix(o), file);
-       else if (!len)
-               return;
+       fputs(diff_line_prefix(o), file);
 
        if (len == 0) {
                has_trailing_newline = (first == '\n');
@@ -606,13 +603,17 @@ static void emit_line_0(struct diff_options *o,
        if (len || !nofirst) {
                if (reverse && want_color(o->use_color))
                        fputs(GIT_COLOR_REVERSE, file);
-               if (set_sign && set_sign[0])
-                       fputs(set_sign, file);
+               if (set_sign || set)
+                       fputs(set_sign ? set_sign : set, file);
                if (first && !nofirst)
                        fputc(first, file);
-               if (set)
-                       fputs(set, file);
-               fwrite(line, len, 1, file);
+               if (len) {
+                       if (set_sign && set && set != set_sign)
+                               fputs(reset, file);
+                       if (set)
+                               fputs(set, file);
+                       fwrite(line, len, 1, file);
+               }
                fputs(reset, file);
        }
        if (has_trailing_carriage_return)
@@ -999,16 +1000,13 @@ static void emit_line_ws_markup(struct diff_options *o,
        if (!ws && !set_sign)
                emit_line_0(o, set, NULL, 0, reset, sign, line, len);
        else if (!ws) {
-               /* Emit just the prefix, then the rest. */
-               emit_line_0(o, set_sign, NULL, !!set_sign, reset, sign, "", 0);
-               emit_line_0(o, set, NULL, 0, reset, 0, line, len);
+               emit_line_0(o, set_sign, set, !!set_sign, reset, sign, line, 
len);
        } else if (blank_at_eof)
                /* Blank line at EOF - paint '+' as well */
                emit_line_0(o, ws, NULL, 0, reset, sign, line, len);
        else {
                /* Emit just the prefix, then the rest. */
-               emit_line_0(o, set_sign ? set_sign : set, NULL, !!set_sign, 
reset,
-                           sign, "", 0);
+               emit_line_0(o, set_sign, set, !!set_sign, reset, sign, "", 0);
                ws_check_emit(line, len, ws_rule,
                              o->file, set, reset, ws);
        }
-- 
2.18.0.345.g5c9ce644c3-goog

Reply via email to