git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4] fetch.c: defer fetch.followRemoteHEAD validation

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 4, 2026, 13:27 UTC
Message-ID
<xmqqa4otvbnk.fsf@gitster.g>
In-Reply-To
<20261003231422.6004-1-colinlewishinton@gmail.com>
Colin Hinton <colinlewishinton@gmail.com> writes:
Show 6 quoted lines
>  	if (!strcmp(k, "fetch.followremotehead")) {
> +		free(fetch_config->follow_remote_head_raw);
>  		if (!v)
> +			fetch_config->follow_remote_head_raw = xstrdup("");
>  		else
> +			fetch_config->follow_remote_head_raw = xstrdup(v);
Hmph, this means that the code cannot distinguish between
	[fetch] followremotehead
	[fetch] followremotehead = ""

It would be less code and more expressive if you lost the conditional, i.e.,

	if (!strcmp(k, "fetch.followremotehead"))
		free(fetch_config->follow_remote_head_raw);
		fetch_config->follow_remote_head_raw = xstrdup_or_null(v);
	}
> +static enum follow_remote_head_settings get_follow_remote_head(const char *setting)
> +{
> +	if (!setting || !*setting)
> +		die(_("missing value for 'fetch.followRemoteHEAD'"));
Then you can differenciate
	if (!setting)
		... we got '[fetch] followRemoteHEAD' ...
		die() as before, complaining that the this is not a Bool.
	else if (!*setting)
		... we got '[fetch] followRemoteHEAD = ""' ...

if we wanted to. It probably do not need to check for an empty string as it will fall through the "else if" cascade below and eventually end up with the warning + default.

Show 11 quoted lines
> +	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 BUILTIN_FOLLOW_REMOTE_HEAD_DFLT;
> +}
Previous: Colin HintonNext: Colin Hinton
Message 15 of 22 in “fetch.c: defer fetch.followRemoteHEAD validation”
  1. fetch.c: defer fetch.followRemoteHEAD validationColin Hinton, Sep 22, 2026
  2. Junio C HamanoSep 22, 2026
  3. Colin HintonSep 23, 2026
  4. Matt HunterSep 24, 2026
  5. Colin HintonSep 25, 2026
  6. Matt HunterSep 24, 2026
  7. fetch.c: defer fetch.followRemoteHEAD validationColin Hinton, Sep 25, 2026
  8. Junio C HamanoSep 25, 2026
  9. Colin HintonSep 25, 2026
  10. Matt HunterSep 30, 2026
  11. Junio C HamanoSep 30, 2026
  12. Colin HintonOct 3, 2026
  13. fetch.c: defer fetch.followRemoteHEAD validationColin Hinton, Sep 25, 2026
  14. fetch.c: defer fetch.followRemoteHEAD validationColin Hinton, Oct 3, 2026
  15. Junio C HamanoOct 4, 2026
  16. Colin HintonOct 4, 2026
  17. Junio C HamanoOct 4, 2026
  18. fetch.c: defer fetch.followRemoteHEAD validationColin Hinton, Oct 4, 2026
  19. Matt HunterOct 5, 2026
  20. Junio C HamanoOct 5, 2026
  21. fetch.c: defer fetch.followRemoteHEAD validationColin Hinton, Oct 6, 2026
  22. Junio C HamanoOct 7, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.