Show 19 quoted lines
> Switch git_unknown_cmd_config() from skip_prefix() to
> parse_config_key() for alias parsing. This properly handles the
> three-level config key structure and prepares for the new
> alias.*.command subsection syntax in the next commit.
>
> This is a compatibility break: the alias configuration parser used
> to be overly permissive and accepted "alias.<subsection>.<key>" as
> defining an alias "<subsection>.<key>". With this change,
> alias.<subsection>.<key> entries are silently ignored (unless <key>
> is "command", which will be given meaning in the next commit).
>
> This behavior was arguably a bug, since config subsections were never
> intended to work this way for aliases, and aliases with dots in their
> names have never been documented or intentionally supported.
>
> Signed-off-by: Jonatan Holmgren <jonatan@jontes.page>
> ---
> help.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
Show 29 quoted lines
>
> diff --git a/help.c b/help.c
> index 0bdb7ca10f..eccd0c22f8 100644
> --- a/help.c
> +++ b/help.c
> @@ -573,7 +573,8 @@ static int git_unknown_cmd_config(const char *var, const char *value,
> void *cb)
> {
> struct help_unknown_cmd_config *cfg = cb;
> - const char *p;
> + const char *subsection, *key;
> + size_t subsection_len;
>
> if (!strcmp(var, "help.autocorrect")) {
> int v = parse_autocorrect(value);
> @@ -588,8 +589,11 @@ static int git_unknown_cmd_config(const char *var, const char *value,
> }
>
> /* Also use aliases for command lookup */
> - if (skip_prefix(var, "alias.", &p))
> - add_cmdname(&cfg->aliases, p, strlen(p));
> + if (!parse_config_key(var, "alias", &subsection, &subsection_len,
> + &key)) {
> + if (!subsection)
> + add_cmdname(&cfg->aliases, key, strlen(key));
> + }
>
> return 0;
> }