git_config_colorbool: refactor stdout_is_tty handling
Usually this function figures out for itself whether stdout is a tty. However, it has an extra parameter just to allow git-config to override the auto-detection for its --get-colorbool option. Instead of an extra parameter, let's just use a global variable. This makes calling easier in the common case, and will make refactoring the colorbool code much simpler. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f1c9626105
commit
e269eb7946
@ -71,7 +71,7 @@ static int parse_branch_color_slot(const char *var, int ofs)
|
|||||||
static int git_branch_config(const char *var, const char *value, void *cb)
|
static int git_branch_config(const char *var, const char *value, void *cb)
|
||||||
{
|
{
|
||||||
if (!strcmp(var, "color.branch")) {
|
if (!strcmp(var, "color.branch")) {
|
||||||
branch_use_color = git_config_colorbool(var, value, -1);
|
branch_use_color = git_config_colorbool(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!prefixcmp(var, "color.branch.")) {
|
if (!prefixcmp(var, "color.branch.")) {
|
||||||
|
@ -1144,7 +1144,7 @@ static int git_status_config(const char *k, const char *v, void *cb)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
|
if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
|
||||||
s->use_color = git_config_colorbool(k, v, -1);
|
s->use_color = git_config_colorbool(k, v);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!prefixcmp(k, "status.color.") || !prefixcmp(k, "color.status.")) {
|
if (!prefixcmp(k, "status.color.") || !prefixcmp(k, "color.status.")) {
|
||||||
|
@ -303,24 +303,17 @@ static void get_color(const char *def_color)
|
|||||||
fputs(parsed_color, stdout);
|
fputs(parsed_color, stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stdout_is_tty;
|
|
||||||
static int get_colorbool_found;
|
static int get_colorbool_found;
|
||||||
static int get_diff_color_found;
|
static int get_diff_color_found;
|
||||||
static int git_get_colorbool_config(const char *var, const char *value,
|
static int git_get_colorbool_config(const char *var, const char *value,
|
||||||
void *cb)
|
void *cb)
|
||||||
{
|
{
|
||||||
if (!strcmp(var, get_colorbool_slot)) {
|
if (!strcmp(var, get_colorbool_slot))
|
||||||
get_colorbool_found =
|
get_colorbool_found = git_config_colorbool(var, value);
|
||||||
git_config_colorbool(var, value, stdout_is_tty);
|
else if (!strcmp(var, "diff.color"))
|
||||||
}
|
get_diff_color_found = git_config_colorbool(var, value);
|
||||||
if (!strcmp(var, "diff.color")) {
|
else if (!strcmp(var, "color.ui"))
|
||||||
get_diff_color_found =
|
git_use_color_default = git_config_colorbool(var, value);
|
||||||
git_config_colorbool(var, value, stdout_is_tty);
|
|
||||||
}
|
|
||||||
if (!strcmp(var, "color.ui")) {
|
|
||||||
git_use_color_default = git_config_colorbool(var, value, stdout_is_tty);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,9 +503,7 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
|||||||
}
|
}
|
||||||
else if (actions == ACTION_GET_COLORBOOL) {
|
else if (actions == ACTION_GET_COLORBOOL) {
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
stdout_is_tty = git_config_bool("command line", argv[0]);
|
color_stdout_is_tty = git_config_bool("command line", argv[0]);
|
||||||
else if (argc == 0)
|
|
||||||
stdout_is_tty = isatty(1);
|
|
||||||
return get_colorbool(argc != 0);
|
return get_colorbool(argc != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,7 +316,7 @@ static int grep_config(const char *var, const char *value, void *cb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "color.grep"))
|
if (!strcmp(var, "color.grep"))
|
||||||
opt->color = git_config_colorbool(var, value, -1);
|
opt->color = git_config_colorbool(var, value);
|
||||||
else if (!strcmp(var, "color.grep.context"))
|
else if (!strcmp(var, "color.grep.context"))
|
||||||
color = opt->color_context;
|
color = opt->color_context;
|
||||||
else if (!strcmp(var, "color.grep.filename"))
|
else if (!strcmp(var, "color.grep.filename"))
|
||||||
|
@ -573,7 +573,7 @@ static int git_show_branch_config(const char *var, const char *value, void *cb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "color.showbranch")) {
|
if (!strcmp(var, "color.showbranch")) {
|
||||||
showbranch_use_color = git_config_colorbool(var, value, -1);
|
showbranch_use_color = git_config_colorbool(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
color.c
11
color.c
@ -2,6 +2,7 @@
|
|||||||
#include "color.h"
|
#include "color.h"
|
||||||
|
|
||||||
int git_use_color_default = 0;
|
int git_use_color_default = 0;
|
||||||
|
int color_stdout_is_tty = -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The list of available column colors.
|
* The list of available column colors.
|
||||||
@ -157,7 +158,7 @@ bad:
|
|||||||
die("bad color value '%.*s' for variable '%s'", value_len, value, var);
|
die("bad color value '%.*s' for variable '%s'", value_len, value, var);
|
||||||
}
|
}
|
||||||
|
|
||||||
int git_config_colorbool(const char *var, const char *value, int stdout_is_tty)
|
int git_config_colorbool(const char *var, const char *value)
|
||||||
{
|
{
|
||||||
if (value) {
|
if (value) {
|
||||||
if (!strcasecmp(value, "never"))
|
if (!strcasecmp(value, "never"))
|
||||||
@ -177,9 +178,9 @@ int git_config_colorbool(const char *var, const char *value, int stdout_is_tty)
|
|||||||
|
|
||||||
/* any normal truth value defaults to 'auto' */
|
/* any normal truth value defaults to 'auto' */
|
||||||
auto_color:
|
auto_color:
|
||||||
if (stdout_is_tty < 0)
|
if (color_stdout_is_tty < 0)
|
||||||
stdout_is_tty = isatty(1);
|
color_stdout_is_tty = isatty(1);
|
||||||
if (stdout_is_tty || (pager_in_use() && pager_use_color)) {
|
if (color_stdout_is_tty || (pager_in_use() && pager_use_color)) {
|
||||||
char *term = getenv("TERM");
|
char *term = getenv("TERM");
|
||||||
if (term && strcmp(term, "dumb"))
|
if (term && strcmp(term, "dumb"))
|
||||||
return 1;
|
return 1;
|
||||||
@ -190,7 +191,7 @@ int git_config_colorbool(const char *var, const char *value, int stdout_is_tty)
|
|||||||
int git_color_default_config(const char *var, const char *value, void *cb)
|
int git_color_default_config(const char *var, const char *value, void *cb)
|
||||||
{
|
{
|
||||||
if (!strcmp(var, "color.ui")) {
|
if (!strcmp(var, "color.ui")) {
|
||||||
git_use_color_default = git_config_colorbool(var, value, -1);
|
git_use_color_default = git_config_colorbool(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
color.h
8
color.h
@ -57,12 +57,18 @@ extern int git_use_color_default;
|
|||||||
extern const char *column_colors_ansi[];
|
extern const char *column_colors_ansi[];
|
||||||
extern const int column_colors_ansi_max;
|
extern const int column_colors_ansi_max;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generally the color code will lazily figure this out itself, but
|
||||||
|
* this provides a mechanism for callers to override autodetection.
|
||||||
|
*/
|
||||||
|
extern int color_stdout_is_tty;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use this instead of git_default_config if you need the value of color.ui.
|
* Use this instead of git_default_config if you need the value of color.ui.
|
||||||
*/
|
*/
|
||||||
int git_color_default_config(const char *var, const char *value, void *cb);
|
int git_color_default_config(const char *var, const char *value, void *cb);
|
||||||
|
|
||||||
int git_config_colorbool(const char *var, const char *value, int stdout_is_tty);
|
int git_config_colorbool(const char *var, const char *value);
|
||||||
void color_parse(const char *value, const char *var, char *dst);
|
void color_parse(const char *value, const char *var, char *dst);
|
||||||
void color_parse_mem(const char *value, int len, const char *var, char *dst);
|
void color_parse_mem(const char *value, int len, const char *var, char *dst);
|
||||||
__attribute__((format (printf, 3, 4)))
|
__attribute__((format (printf, 3, 4)))
|
||||||
|
4
diff.c
4
diff.c
@ -137,7 +137,7 @@ static int git_config_rename(const char *var, const char *value)
|
|||||||
int git_diff_ui_config(const char *var, const char *value, void *cb)
|
int git_diff_ui_config(const char *var, const char *value, void *cb)
|
||||||
{
|
{
|
||||||
if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) {
|
if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) {
|
||||||
diff_use_color_default = git_config_colorbool(var, value, -1);
|
diff_use_color_default = git_config_colorbool(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!strcmp(var, "diff.renames")) {
|
if (!strcmp(var, "diff.renames")) {
|
||||||
@ -3373,7 +3373,7 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
|
|||||||
else if (!strcmp(arg, "--color"))
|
else if (!strcmp(arg, "--color"))
|
||||||
options->use_color = 1;
|
options->use_color = 1;
|
||||||
else if (!prefixcmp(arg, "--color=")) {
|
else if (!prefixcmp(arg, "--color=")) {
|
||||||
int value = git_config_colorbool(NULL, arg+8, -1);
|
int value = git_config_colorbool(NULL, arg+8);
|
||||||
if (value == 0)
|
if (value == 0)
|
||||||
options->use_color = 0;
|
options->use_color = 0;
|
||||||
else if (value > 0)
|
else if (value > 0)
|
||||||
|
@ -620,7 +620,7 @@ int parse_opt_color_flag_cb(const struct option *opt, const char *arg,
|
|||||||
|
|
||||||
if (!arg)
|
if (!arg)
|
||||||
arg = unset ? "never" : (const char *)opt->defval;
|
arg = unset ? "never" : (const char *)opt->defval;
|
||||||
value = git_config_colorbool(NULL, arg, -1);
|
value = git_config_colorbool(NULL, arg);
|
||||||
if (value < 0)
|
if (value < 0)
|
||||||
return opterror(opt,
|
return opterror(opt,
|
||||||
"expects \"always\", \"auto\", or \"never\"", 0);
|
"expects \"always\", \"auto\", or \"never\"", 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user