Re: [PATCH] refs: parse_hide_refs_config to use parse_config_key
- From
Jeff King <peff@peff.net>
- Date
- Feb 24, 2017, 20:39 UTC
- Message-ID
- <20170224203940.hbmfsouw5k67l3h3@sigill.intra.peff.net>
- In-Reply-To
- <20170224203335.3762-1-sbeller@google.com>
On Fri, Feb 24, 2017 at 12:33:35PM -0800, Stefan Beller wrote:
Show 18 quoted lines
> parse_config_key was introduced in 1b86bbb0ade (config: add helper > function for parsing key names, 2013-01-22), the NEEDSWORK that is removed > in this patch was introduced at daebaa7813 (upload/receive-pack: allow > hiding ref hierarchies, 2013-01-18), which is only a couple days apart, > so presumably the code replaced in this patch was only introduced due > to not wanting to wait on the proper helper function being available. > > Make the condition easier to read by using parse_config_key. > > Signed-off-by: Stefan Beller <sbeller@google.com> > --- > > When investigating the state of the art for parsing config options, I saw > opportunity for a small drive-by patch in an area that I did not look at for > a long time. > > The authors of the two mentioned commits are Jeff and Junio, so maybe you > remember another reason for this NEEDSWORK here?
No, I think the reasoning you gave in the commit message is exactly what happened.
Show 16 quoted lines
> diff --git a/refs.c b/refs.c
> index cd36b64ed9..c9e5f13630 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -1034,10 +1034,11 @@ static struct string_list *hide_refs;
>
> int parse_hide_refs_config(const char *var, const char *value, const char *section)
> {
> + const char *subsection, *key;
> + int subsection_len;
> if (!strcmp("transfer.hiderefs", var) ||
> - /* NEEDSWORK: use parse_config_key() once both are merged */
> - (starts_with(var, section) && var[strlen(section)] == '.' &&
> - !strcmp(var + strlen(section), ".hiderefs"))) {
> + (!parse_config_key(var, section, &subsection, &subsection_len, &key)
> + && !strcmp(key, "hiderefs"))) {This will start parsing "receive.foobar.hiderefs", which we don't want. I think you need:
!parse_config_key(var, section, &subsection, &subsection_len, &key) && !subsection && !strcmp(key, "hiderefs")
Perhaps passing NULL for the subsection variable should cause parse_config_key to return failure when there is a non-empty subsection.
-Peff
PS Outside of parse_config_key, this code would be nicer if it used skip_prefix() instead of starts_with(). Since it's going away, I don't think it matters, but I note that parse_config_key could probably benefit from the same.