On Fri, Apr 06, 2018 at 02:14:34AM -0400, Eric Sunshine wrote: > On Fri, Apr 6, 2018 at 1:29 AM, Taylor Blau <me@xxxxxxxxxxxx> wrote: > > builtin/config.c: prefer `--type=bool` over `--bool`, etc. > > This patch isn't just preferring --type; it's actually introducing the > functionality. Perhaps: > > builtin/config.c: support --type=<type> as preferred alias for --<type> > > (Not worth a re-roll.) Thanks; I like this more, even though it is lengthy. > > `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 > > "add extend"? Thanks for pointing this out -- I fixed it in v6. > > `--type=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 `--type=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 upcoming > > patch to support querying a color value with a default via `--type=color > > --default=....`, without squandering `--color`. > > Drop one of the periods in "...." if you happen to re-roll for some reason. Great catch, thanks. > > Signed-off-by: Taylor Blau <me@xxxxxxxxxxxx> > > --- > > diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt > > @@ -9,13 +9,13 @@ git-config - Get and set repository or global options > > SYNOPSIS > > -------- > > [verse] > > -'git config' [<file-option>] [type] [--show-origin] [-z|--null] name [value [value_regex]] > > +'git config' [<file-option>] [--type] [--show-origin] [-z|--null] name [value [value_regex]] > > It's pretty confusing to see bare "--type" like this which makes it > seem as if it doesn't take an argument at all. Better would be > "[--type=<type>]". Agreed; I have made this change in v6. > > @@ -38,12 +38,13 @@ existing values that match the regexp are updated or unset. If > > +The `--type` option requests 'git config' to ensure that the configured values > > +assosciated with the given variable(s) are of the given type. When given > > s/assosciated/associated/ Ditto. > > +`--type`, 'git config' will convert the value to that type's canonical form. > > +ensure that the variable(s) are of the given type and convert the value to the > > +canonical form. > > Meh, looks like some sort of editing botch here. I doubt you meant to > repeat "canonical form" like this. Ditto. > > If no type specifier is passed, no checks or transformations are > > +performed on the value. Callers may unset any pre-existing type specifiers with > > +`--no-type`. > > > > +--no-type:: > > + Un-sets the previously set type specifier (if one was previously set). This > > + option requests that 'git config' not canonicalize the retrieved variable. > > + `--no-type` has no effect without `--type=<type>` or `--<type>`. > > The final sentence doesn't really add value; I'd probably drop it as > extraneous. (Subjective, and not worth a re-roll.) Hm. I like the completeness of it -- I think that I would prefer to leave it in, unless others have strong feelings. > > 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(_("unrecognized --type argument, %s"), arg); > > + return 1; > > Pointless unreachable 'return'. Removed -- this is a habit of mine from Git LFS. We have a function similar to die(), but Go doesn't know that it will terminate the program, so it forces me to write a "return" after it. Thanks, Taylor