git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH/RFC] "color.diff = true" is not "always" anymore.

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 28, 2007, 07:26 UTC
Message-ID
<7vd4tuakzj.fsf_-_@gitster.siamese.dyndns.org>
In-Reply-To
<7vr6icej23.fsf@gitster.siamese.dyndns.org>

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>
---
 * This is definitely a backward incompatible change, but I think it is
   only in a good way.  Are there people who have "color.* = true" and
   do mean it?  If we do this, they need to change their configuration
   and use "always", but I suspect there is no sane workflow that wants
   the color escape code in files (e.g. "git log >file") or pipes
   (e.g. "git diff | grep foo") by default, in which case this won't
   hurt anybody and would help countless normal people who were bitten
   by the mistaken meaning originally chosen for "true".
 color.c |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/color.c b/color.c
index 124ba33..97cfbda 100644
--- 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,
-- 
1.5.3.6.2039.g0495
Previous: Junio C HamanoNext: Johannes Schindelin
Message 5 of 10 in “Use --no-color option on git log commands.”
  1. Use --no-color option on git log commands.Pascal Obry, Nov 26, 2007
  2. Junio C HamanoNov 26, 2007
  3. Pascal ObryNov 27, 2007
  4. Junio C HamanoNov 28, 2007
  5. "color.diff = true" is not "always" anymore.Junio C Hamano, Nov 28, 2007
  6. Johannes SchindelinNov 28, 2007
  7. Jeff KingNov 28, 2007
  8. Junio C HamanoDec 1, 2007
  9. Jeff KingDec 1, 2007
  10. Junio C HamanoDec 1, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.