Code

"color.diff = true" is not "always" anymore.
authorJunio C Hamano <gitster@pobox.com>
Mon, 26 Nov 2007 22:30:28 +0000 (14:30 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 29 Nov 2007 01:33:17 +0000 (17:33 -0800)
Too many people got burned by setting color.diff and color.status to
true when they really should have set it to "auto".

This makes only "always" to do the unconditional colorization, and
change the meaning of "true" to the same as "auto": colorize only when
we are talking to a terminal.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
color.c

diff --git a/color.c b/color.c
index 124ba331c7f798b9b922fc8482dbc215202b99a6..97cfbda31ac02b7e4fe747052c28821a34ee0165 100644 (file)
--- a/color.c
+++ b/color.c
@@ -118,21 +118,27 @@ bad:
 
 int git_config_colorbool(const char *var, const char *value)
 {
-       if (!value)
-               return 1;
-       if (!strcasecmp(value, "auto")) {
-               if (isatty(1) || (pager_in_use && pager_use_color)) {
-                       char *term = getenv("TERM");
-                       if (term && strcmp(term, "dumb"))
-                               return 1;
-               }
-               return 0;
+       if (value) {
+               if (!strcasecmp(value, "never"))
+                       return 0;
+               if (!strcasecmp(value, "always"))
+                       return 1;
+               if (!strcasecmp(value, "auto"))
+                       goto auto_color;
        }
-       if (!strcasecmp(value, "never"))
+
+       /* Missing or explicit false to turn off colorization */
+       if (!git_config_bool(var, value))
                return 0;
-       if (!strcasecmp(value, "always"))
-               return 1;
-       return git_config_bool(var, value);
+
+       /* any normal truth value defaults to 'auto' */
+ auto_color:
+       if (isatty(1) || (pager_in_use && pager_use_color)) {
+               char *term = getenv("TERM");
+               if (term && strcmp(term, "dumb"))
+                       return 1;
+       }
+       return 0;
 }
 
 static int color_vfprintf(FILE *fp, const char *color, const char *fmt,