Re: [PATCH v2] fetch.c: defer fetch.followRemoteHEAD validation
- From
Colin Hinton <colinlewishinton@gmail.com>
- Date
- Sep 25, 2026, 20:30 UTC
- Message-ID
- <CAHeTm9Pb-fb-ZS_m4UVNZxfp+ENQwBUGDvP1E24dEDTZy5RFFw@mail.gmail.com>
- In-Reply-To
- <xmqqo6dlt906.fsf@gitster.g>
On Fri, Sep 25, 2026 at 12:40 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 32 quoted lines
>
> Colin Hinton <colinlewishinton@gmail.com> 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.
Show 26 quoted lines
>
> 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