Code

wt-status: load diff ui config
authorJeff King <peff@peff.net>
Sun, 26 Oct 2008 04:49:35 +0000 (00:49 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sun, 26 Oct 2008 21:09:48 +0000 (14:09 -0700)
When "git status -v" shows a diff, we did not respect the
user's usual diff preferences at all. Loading just
git_diff_basic_config would give us things like rename
limits and diff drivers. But it makes even more sense to
load git_diff_ui_config, which gives us colorization if the
user has requested it.

Note that we need to take special care to cancel
colorization when writing to the commit template file, as
described in the code comments.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7502-commit.sh
wt-status.c

index 3eb9faedcf75c7b8a535b369e5a19107c6e81026..ad42c78d7c21497a6ebb4e9cef4efd6334f947da 100755 (executable)
@@ -89,6 +89,14 @@ test_expect_success 'verbose' '
 
 '
 
+test_expect_success 'verbose respects diff config' '
+
+       git config color.diff always &&
+       git status -v >actual &&
+       grep "\[1mdiff --git" actual &&
+       git config --unset color.diff
+'
+
 test_expect_success 'cleanup commit messages (verbatim,-t)' '
 
        echo >>negative &&
index c3a9cab8980daa38e647a13eb2f0fcb42fbfbb8e..54d2f586938d121bf49a7640883e1e525009589c 100644 (file)
@@ -303,6 +303,14 @@ static void wt_status_print_verbose(struct wt_status *s)
        rev.diffopt.detect_rename = 1;
        rev.diffopt.file = s->fp;
        rev.diffopt.close_file = 0;
+       /*
+        * If we're not going to stdout, then we definitely don't
+        * want color, since we are going to the commit message
+        * file (and even the "auto" setting won't work, since it
+        * will have checked isatty on stdout).
+        */
+       if (s->fp != stdout)
+               DIFF_OPT_CLR(&rev.diffopt, COLOR_DIFF);
        run_diff_index(&rev, 1);
 }
 
@@ -422,5 +430,5 @@ int git_status_config(const char *k, const char *v, void *cb)
                        return error("Invalid untracked files mode '%s'", v);
                return 0;
        }
-       return git_color_default_config(k, v, cb);
+       return git_diff_ui_config(k, v, cb);
 }