diff.c: color moved lines differently, plain mode
[gitweb.git] / diff.c
diff --git a/diff.c b/diff.c
index 084ecc5678cc0e01d34d75544124dfc4152cc0ed..79ea592388375d1e1167382e1d31246cfcd021fb 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -256,12 +256,14 @@ static int parse_color_moved(const char *arg)
 
        if (!strcmp(arg, "no"))
                return COLOR_MOVED_NO;
+       else if (!strcmp(arg, "plain"))
+               return COLOR_MOVED_PLAIN;
        else if (!strcmp(arg, "zebra"))
                return COLOR_MOVED_ZEBRA;
        else if (!strcmp(arg, "default"))
                return COLOR_MOVED_DEFAULT;
        else
-               return error(_("color moved setting must be one of 'no', 'default', 'zebra'"));
+               return error(_("color moved setting must be one of 'no', 'default', 'zebra', 'plain'"));
 }
 
 int git_diff_ui_config(const char *var, const char *value, void *cb)
@@ -879,7 +881,8 @@ static void mark_color_as_moved(struct diff_options *o,
                }
 
                if (!match) {
-                       if (block_length < COLOR_MOVED_MIN_BLOCK_LENGTH) {
+                       if (block_length < COLOR_MOVED_MIN_BLOCK_LENGTH &&
+                           o->color_moved != COLOR_MOVED_PLAIN) {
                                for (i = 0; i < block_length + 1; i++) {
                                        l = &o->emitted_symbols->buf[n - i];
                                        l->flags &= ~DIFF_SYMBOL_MOVED_LINE;
@@ -893,6 +896,9 @@ static void mark_color_as_moved(struct diff_options *o,
                l->flags |= DIFF_SYMBOL_MOVED_LINE;
                block_length++;
 
+               if (o->color_moved == COLOR_MOVED_PLAIN)
+                       continue;
+
                /* Check any potential block runs, advance each or nullify */
                for (i = 0; i < pmb_nr; i++) {
                        struct moved_entry *p = pmb[i];