On Wed, Apr 4, 2018 at 2:07 AM, Taylor Blau <me@xxxxxxxxxxxx> wrote: > `git config` has long allowed the ability for callers to provide a 'type > specifier', which instructs `git config` to (1) ensure that incoming > values are satisfiable under that type, and (2) that outgoing values are > canonicalized under that type. > > In another series, we propose to add extend this functionality with > `--color` and `--default` to replace `--get-color`. > > However, we traditionally use `--color` to mean "colorize this output", > instead of "this value should be treated as a color". > > Currently, `git config` does not support this kind of colorization, but > we should be careful to avoid inhabiting this option too soon, so that > `git config` can support `--color` (in the traditional sense) in the > future, if that is desired. > > In this patch, we prefer `--type=[int|bool|bool-or-int|...]` over > `--int`, `--bool`, and etc. This allows the aforementioned other patch > to add `--color` (in the non-traditional sense) via `--type=color`, > instead of `--color`. I always find this last sentence confusing since it's not clear to which ilk of "--color" option you refer. Perhaps say instead something like: This normalization will allow the aforementioned upcoming patch to support querying a color value with a default via "--type=color --default=...". > Signed-off-by: Taylor Blau <me@xxxxxxxxxxxx> > --- > diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt > @@ -160,30 +158,34 @@ See also <<FILES>>. > +--type [type]:: > + 'git config' will ensure that any input output is valid under the given type > + constraint(s), and will canonicalize outgoing values in `[type]`'s canonical > + form. Do the brackets in "[type]" mean that the argument is optional? If so, what does 'type' default to when not specified? The documentation should discuss this. > diff --git a/builtin/config.c b/builtin/config.c > @@ -61,6 +61,33 @@ static int show_origin; > +static int option_parse_type(const struct option *opt, const char *arg, > + int unset) > +{ > + [...] > + if (!strcmp(arg, "bool")) > + *type = TYPE_BOOL; > + else if (!strcmp(arg, "int")) > + *type = TYPE_INT; > + else if (!strcmp(arg, "bool-or-int")) > + *type = TYPE_BOOL_OR_INT; > + else if (!strcmp(arg, "path")) > + *type = TYPE_PATH; > + else if (!strcmp(arg, "expiry-date")) > + *type = TYPE_EXPIRY_DATE; > + else { > + die(_("unexpected --type argument, %s"), arg); "unexpected" doesn't seem like the best word choice since an argument to --type _is_ expected. Perhaps you mean "unrecognized"? > + return 1; > + } > + return 0; > +}