From: Jeff King <peff@peff.net>
To: Taylor Blau <me@ttaylorr.com>
Cc: git@vger.kernel.org, gitster@pobox.com, sunshine@sunshineco.com
Subject: Re: [PATCH v4 3/3] builtin/config: introduce `color` type specifier
Date: Thu, 5 Apr 2018 18:36:20 -0400 [thread overview]
Message-ID: <20180405223620.GD29117@sigill.intra.peff.net> (raw)
In-Reply-To: <20180405025917.GD49902@syl.local>
On Wed, Apr 04, 2018 at 07:59:17PM -0700, Taylor Blau wrote:
> 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 `--color` and encourage `--type=color`,
> `--default` together over `--get-color` alone.
In this last sentence, did you mean "let's introduce --type=color and
encourage its use with --default over --get-color alone"?
> Signed-off-by: Taylor Blau <me@ttaylorr.com>
> ---
> Documentation/git-config.txt | 10 ++++++----
> builtin/config.c | 21 +++++++++++++++++++++
> t/t1300-repo-config.sh | 30 ++++++++++++++++++++++++++++++
> 3 files changed, 57 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
> index 620492d1e..bde702d2e 100644
> --- a/Documentation/git-config.txt
> +++ b/Documentation/git-config.txt
> @@ -38,10 +38,8 @@ existing values that match the regexp are updated or unset. If
> you want to handle the lines that do *not* match the regex, just
> prepend a single exclamation mark in front (see also <<EXAMPLES>>).
>
> -A type specifier may be given as an argument to `--type` to make 'git config'
> -ensure that the variable(s) are of the given type and convert the value to the
> -canonical form. If no type specifier is passed, no checks or transformations are
> -performed on the value.
> +`color`::
> + The value is taken as an ANSI color escape sequence.
We'd want to keep that introductory paragraph, right? And there is no
`--color`? So I think this hunk can go away (and is presumably a
leftover mistake during rebasing).
> When reading, the values are read from the system, global and
> repository local configuration files by default, and options
> @@ -177,6 +175,7 @@ Valid `<type>`'s include:
> ~/` from the command line to let your shell do the expansion.)
> - 'expiry-date': canonicalize by converting from a fixed or relative date-string
> to a timestamp. This specifier has no effect when setting the value.
> +- 'color': canonicalize by converting to an ANSI color escape sequence.
> +
This one is part of the --type list, so that's what we expect.
You may want to also cover the behavior when setting the value (we check
that it's sane, but store the original).
> diff --git a/builtin/config.c b/builtin/config.c
> index 1328b568b..aa3fcabe9 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
Not strictly necessary for this series, but if this became an enum as
part of the de-bitifying, you wouldn't have to write the numbers
manually. :)
> @@ -203,6 +206,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 {
OK, formatting shows the converted value. Good.
> @@ -348,6 +356,19 @@ 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))
> + /*
> + * 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("cannot parse color '%s'", value);
> + }
And this returns the original. Good.
> diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
> index b25ab7b9e..c630bdc77 100755
> --- a/t/t1300-repo-config.sh
> +++ b/t/t1300-repo-config.sh
The tests look good.
-Peff
next prev parent reply other threads:[~2018-04-05 22:36 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-06 2:17 [PATCH 0/4] Teach `--default` to `git-config(1)` Taylor Blau
2018-03-06 2:17 ` [PATCH 1/4] builtin/config: introduce `--default` Taylor Blau
2018-03-06 6:52 ` Jeff King
2018-03-06 7:14 ` Eric Sunshine
2018-03-06 7:08 ` Eric Sunshine
2018-03-06 2:17 ` [PATCH 2/4] Documentation: list all type specifiers in config prose Taylor Blau
2018-03-06 6:52 ` Jeff King
2018-03-06 7:40 ` Junio C Hamano
2018-03-06 2:17 ` [PATCH 3/4] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-03-06 6:53 ` Jeff King
2018-03-06 2:17 ` [PATCH 4/4] builtin/config: introduce `--color` type specifier Taylor Blau
2018-03-06 7:00 ` Jeff King
2018-03-06 2:20 ` [PATCH 0/4] Teach `--default` to `git-config(1)` Taylor Blau
2018-03-24 0:55 ` [PATCH v2 " Taylor Blau
2018-03-24 0:55 ` [PATCH v2 1/4] builtin/config: introduce `--default` Taylor Blau
2018-03-26 8:34 ` Jeff King
2018-03-29 1:31 ` Taylor Blau
2018-03-24 0:55 ` [PATCH v2 2/4] Documentation: list all type specifiers in config prose Taylor Blau
2018-03-26 8:55 ` Jeff King
2018-03-29 1:32 ` Taylor Blau
2018-03-24 0:55 ` [PATCH v2 3/4] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-03-24 0:55 ` [PATCH v2 4/4] builtin/config: introduce `--color` type specifier Taylor Blau
2018-03-26 9:16 ` Jeff King
2018-03-29 1:36 ` Taylor Blau
2018-03-26 9:18 ` [PATCH v2 0/4] Teach `--default` to `git-config(1)` Jeff King
2018-03-29 1:16 ` [PATCH v3 " Taylor Blau
2018-03-29 1:16 ` [PATCH v3 1/3] builtin/config: introduce `--default` Taylor Blau
2018-03-30 18:06 ` Junio C Hamano
2018-04-05 2:45 ` Taylor Blau
2018-03-30 20:23 ` Eric Sunshine
2018-04-05 2:46 ` Taylor Blau
2018-03-29 1:16 ` [PATCH v3 2/3] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-03-30 20:26 ` Eric Sunshine
2018-04-05 2:47 ` Taylor Blau
2018-03-29 1:16 ` [PATCH v3 3/3] builtin/config: introduce `color` type specifier Taylor Blau
2018-03-30 18:09 ` Junio C Hamano
2018-04-05 2:48 ` Taylor Blau
2018-03-29 1:29 ` [PATCH v3 0/4] Teach `--default` to `git-config(1)` Taylor Blau
2018-04-05 2:58 ` [PATCH v4 0/3] " Taylor Blau
2018-04-05 22:37 ` Jeff King
[not found] ` <cover.1522896713.git.me@ttaylorr.com>
2018-04-05 2:59 ` [PATCH v4 1/3] builtin/config: introduce `--default` Taylor Blau
2018-04-05 22:29 ` Jeff King
2018-04-06 5:40 ` Taylor Blau
2018-04-08 23:18 ` Junio C Hamano
2018-04-10 0:20 ` Taylor Blau
2018-04-05 22:40 ` Eric Sunshine
2018-04-06 5:50 ` Taylor Blau
2018-04-05 2:59 ` [PATCH v4 2/3] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-04-05 2:59 ` [PATCH v4 3/3] builtin/config: introduce `color` type specifier Taylor Blau
2018-04-05 22:36 ` Jeff King [this message]
2018-04-05 22:52 ` Eric Sunshine
2018-04-05 22:53 ` Jeff King
2018-04-06 6:05 ` Taylor Blau
2018-04-06 6:02 ` Taylor Blau
2018-04-06 5:27 ` [PATCH v5 0/2] *** SUBJECT HERE *** Taylor Blau
2018-04-06 5:40 ` Jacob Keller
2018-04-06 5:29 ` [PATCH v5 0/2] builtin/config.c: prefer `--type=bool` over `--bool`, etc Taylor Blau
2018-04-06 5:32 ` Taylor Blau
[not found] ` <cover.1522992443.git.me@ttaylorr.com>
2018-04-06 5:29 ` [PATCH v5 1/2] builtin/config.c: treat type specifiers singularly Taylor Blau
2018-04-06 5:29 ` [PATCH v5 2/2] builtin/config.c: prefer `--type=bool` over `--bool`, etc Taylor Blau
2018-04-06 6:14 ` Eric Sunshine
2018-04-06 6:41 ` Taylor Blau
2018-04-06 14:55 ` Jeff King
2018-04-07 1:00 ` Taylor Blau
2018-04-06 6:30 ` [PATCH v5 0/3] builtin/config: introduce `--default` Taylor Blau
[not found] ` <cover.1522996150.git.me@ttaylorr.com>
2018-04-06 6:30 ` [PATCH v5 1/3] " Taylor Blau
2018-04-06 6:53 ` Eric Sunshine
2018-04-06 7:40 ` Eric Sunshine
2018-04-07 0:58 ` Taylor Blau
2018-04-07 8:44 ` Eric Sunshine
2018-04-07 0:49 ` Taylor Blau
2018-04-07 8:38 ` Eric Sunshine
2018-04-06 6:30 ` [PATCH v5 2/3] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-04-06 6:30 ` [PATCH v5 3/3] builtin/config: introduce `color` type specifier Taylor Blau
2018-04-06 7:29 ` Eric Sunshine
2018-04-07 0:42 ` Taylor Blau
2018-04-10 0:18 ` [PATCH v6 0/3] Teach `--default` to `git-config(1)` Taylor Blau
[not found] ` <cover.1523319159.git.me@ttaylorr.com>
2018-04-10 0:18 ` [PATCH v6 1/3] builtin/config: introduce `--default` Taylor Blau
2018-04-10 1:50 ` Junio C Hamano
2018-04-10 0:18 ` [PATCH v6 2/3] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-04-10 0:18 ` [PATCH v6 3/3] builtin/config: introduce `color` type specifier Taylor Blau
2018-04-10 0:18 ` Taylor Blau
2018-04-10 1:54 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180405223620.GD29117@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=me@ttaylorr.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).