From: Colin Hinton Date: Fri, 25 Sep 2026 20:30:54 GMT Subject: Re: [PATCH v2] fetch.c: defer fetch.followRemoteHEAD validation Message-ID: In-Reply-To: On Fri, Sep 25, 2026 at 12:40 PM Junio C Hamano wrote: > > Colin Hinton writes: > > > struct fetch_config { > > enum display_format display_format; > > - enum follow_remote_head_settings follow_remote_head; > > + char *follow_remote_head_raw; > > int all; > > int prune; > > int prune_tags; > > @@ -176,24 +176,31 @@ static int git_fetch_config(const char *k, const char *v, > > } > > > > if (!strcmp(k, "fetch.followremotehead")) { > > - if (!v) > > - return config_error_nonbool(k); > > - else if (!strcmp(v, "never")) > > - fetch_config->follow_remote_head = FOLLOW_REMOTE_NEVER; > > - else if (!strcmp(v, "create")) > > - fetch_config->follow_remote_head = FOLLOW_REMOTE_CREATE; > > - else if (!strcmp(v, "warn")) > > - fetch_config->follow_remote_head = FOLLOW_REMOTE_WARN; > > - else if (!strcmp(v, "always")) > > - fetch_config->follow_remote_head = FOLLOW_REMOTE_ALWAYS; > > - else > > - warning(_("unrecognized fetch.followRemoteHEAD value '%s' ignored"), v); > > + free(fetch_config->follow_remote_head_raw); > > + fetch_config->follow_remote_head_raw = xstrdup(v); > > This will segfault when !v, so > > fetch_config->follow_remote_head_raw = xstrdup_or_null(v); Will change shortly. > > With that change, > > > +static enum follow_remote_head_settings get_follow_remote_head(const char *setting) > > +{ > > + if (!setting) > > + die(_("missing value for 'fetch.followRemoteHEAD'")); > > + else if (!strcmp(setting, "never")) > > + return FOLLOW_REMOTE_NEVER; > > + else if (!strcmp(setting, "create")) > > + return FOLLOW_REMOTE_CREATE; > > + else if (!strcmp(setting, "warn")) > > + return FOLLOW_REMOTE_WARN; > > + else if (!strcmp(setting, "always")) > > + return FOLLOW_REMOTE_ALWAYS; > > + warning(_("unrecognized fetch.followRemoteHEAD value '%s' ignored"), setting); > > + return FOLLOW_REMOTE_UNCONFIGURED; > > +} > > This would do a reasonable job. > > We should do something similar to what remote.c parses for > consistency, but other than that, it seems this topic is moving in > the right direction. > > Thanks. The only critical difference I see in the configuration parse between remote.c and fetch.c is the case for "warn-if-not-$branch". From reading the git-config manpage, this is only a setting for a remote and not for fetch directly so I do not see a reason to check this in fetch.c. Perhaps I am missing something else to make this more consistent, or perhaps there is an argument to support the configuration for fetch to "warn-if-not-$branch" in which case can be added to this patch. -Colin Hinton