diff options
author | Taylor Blau <me@ttaylorr.com> | 2018-04-09 17:18:31 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-04-23 22:52:20 +0900 |
commit | 63e2a0f8e9cc3d66137a72e424a8b59f1c4dbd79 (patch) | |
tree | dd5cb366414d546c755e41712980a0a829e14b5b /builtin | |
parent | config.c: introduce 'git_config_color' to parse ANSI colors (diff) | |
download | tgif-63e2a0f8e9cc3d66137a72e424a8b59f1c4dbd79.tar.xz |
builtin/config: introduce `color` type specifier
As of this commit, the canonical way to retreive an ANSI-compatible
color escape sequence from a configuration file is with the
`--get-color` action.
This is to allow Git to "fall back" on a default value for the color
should the given section not exist in the specified configuration(s).
With the addition of `--default`, this is no longer needed since:
$ git config --default red --type=color core.section
will be have exactly as:
$ git config --get-color core.section red
For consistency, let's introduce `--type=color` and encourage its use
with `--default` together over `--get-color` alone.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/config.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/builtin/config.c b/builtin/config.c index 2f78a02ca1..69e7270356 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -61,6 +61,7 @@ static int show_origin; #define TYPE_BOOL_OR_INT 3 #define TYPE_PATH 4 #define TYPE_EXPIRY_DATE 5 +#define TYPE_COLOR 6 #define OPT_CALLBACK_VALUE(s, l, v, h, i) \ { OPTION_CALLBACK, (s), (l), (v), NULL, (h), PARSE_OPT_NOARG | \ @@ -94,6 +95,8 @@ static int option_parse_type(const struct option *opt, const char *arg, new_type = TYPE_PATH; else if (!strcmp(arg, "expiry-date")) new_type = TYPE_EXPIRY_DATE; + else if (!strcmp(arg, "color")) + new_type = TYPE_COLOR; else die(_("unrecognized --type argument, %s"), arg); } @@ -230,6 +233,11 @@ static int format_config(struct strbuf *buf, const char *key_, const char *value if (git_config_expiry_date(&t, key_, value_) < 0) return -1; strbuf_addf(buf, "%"PRItime, t); + } else if (type == TYPE_COLOR) { + char v[COLOR_MAXLEN]; + if (git_config_color(v, key_, value_) < 0) + return -1; + strbuf_addstr(buf, v); } else if (value_) { strbuf_addstr(buf, value_); } else { @@ -375,6 +383,20 @@ static char *normalize_value(const char *key, const char *value) else return xstrdup(v ? "true" : "false"); } + if (type == TYPE_COLOR) { + char v[COLOR_MAXLEN]; + if (git_config_color(v, key, value)) + die("cannot parse color '%s'", value); + + /* + * The contents of `v` now contain an ANSI escape + * sequence, not suitable for including within a + * configuration file. Treat the above as a + * "sanity-check", and return the given value, which we + * know is representable as valid color code. + */ + return xstrdup(value); + } die("BUG: cannot normalize type %d", type); } |