summaryrefslogtreecommitdiff
path: root/color.c
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2018-04-21 10:09:57 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-04-24 01:38:47 (GMT)
commit295d949cfabc18fb588f269c77d1f8ff4a613686 (patch)
tree37438ad35b11bac18f386445f6571696fcf355ae /color.c
parentfe0a9eaf31dd0c349ae4308498c33a5c3794b293 (diff)
downloadgit-295d949cfabc18fb588f269c77d1f8ff4a613686.zip
git-295d949cfabc18fb588f269c77d1f8ff4a613686.tar.gz
git-295d949cfabc18fb588f269c77d1f8ff4a613686.tar.bz2
color: introduce support for colorizing stderr
So far, we only ever asked whether stdout wants to be colorful. In the upcoming patches, we will want to make push errors more prominent, which are printed to stderr, though. So let's refactor the want_color() function into a want_color_fd() function (which expects to be called with fd == 1 or fd == 2 for stdout and stderr, respectively), and then define the macro `want_color()` to use the want_color_fd() function. And then also add a macro `want_color_stderr()`, for convenience and for documentation. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'color.c')
-rw-r--r--color.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/color.c b/color.c
index f277e72..c6c6c4f 100644
--- a/color.c
+++ b/color.c
@@ -319,18 +319,20 @@ int git_config_colorbool(const char *var, const char *value)
return GIT_COLOR_AUTO;
}
-static int check_auto_color(void)
+static int check_auto_color(int fd)
{
- if (color_stdout_is_tty < 0)
- color_stdout_is_tty = isatty(1);
- if (color_stdout_is_tty || (pager_in_use() && pager_use_color)) {
+ static int color_stderr_is_tty = -1;
+ int *is_tty_p = fd == 1 ? &color_stdout_is_tty : &color_stderr_is_tty;
+ if (*is_tty_p < 0)
+ *is_tty_p = isatty(fd);
+ if (*is_tty_p || (fd == 1 && pager_in_use() && pager_use_color)) {
if (!is_terminal_dumb())
return 1;
}
return 0;
}
-int want_color(int var)
+int want_color_fd(int fd, int var)
{
/*
* NEEDSWORK: This function is sometimes used from multiple threads, and
@@ -339,15 +341,15 @@ int want_color(int var)
* is listed in .tsan-suppressions for the time being.
*/
- static int want_auto = -1;
+ static int want_auto[3] = { -1, -1, -1 };
if (var < 0)
var = git_use_color_default;
if (var == GIT_COLOR_AUTO) {
- if (want_auto < 0)
- want_auto = check_auto_color();
- return want_auto;
+ if (want_auto[fd] < 0)
+ want_auto[fd] = check_auto_color(fd);
+ return want_auto[fd];
}
return var;
}