Re: [PATCH v3 3/3] builtin/fetch: die on --negotiate-only and --recurse-submodules
From: Junio C Hamano <hidden>
Date: 2021-12-22 06:46:14
Glen Choo [off-list ref] writes:
+This is incompatible with `--recurse-submodules[=yes|on-demand]`. Internally this is used to implement the `push.negotiate` option, see linkgit:git-config[1].
Makes sense.
quoted hunk
diff --git a/builtin/fetch.c b/builtin/fetch.c index 883bb1b10c..54f970130e 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c@@ -75,6 +75,7 @@ static struct transport *gtransport; static struct transport *gsecondary; static const char *submodule_prefix = ""; static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT; +static int recurse_submodules_explicit = RECURSE_SUBMODULES_DEFAULT; static int recurse_submodules_default = RECURSE_SUBMODULES_ON_DEMAND; static int shown_url = 0; static struct refspec refmap = REFSPEC_INIT_FETCH;@@ -166,7 +167,7 @@ static struct option builtin_fetch_options[] = { N_("prune remote-tracking branches no longer on remote")), OPT_BOOL('P', "prune-tags", &prune_tags, N_("prune local tags no longer on remote and clobber changed tags")), - OPT_CALLBACK_F(0, "recurse-submodules", &recurse_submodules, N_("on-demand"), + OPT_CALLBACK_F(0, "recurse-submodules", &recurse_submodules_explicit, N_("on-demand"), N_("control recursive fetching of submodules"), PARSE_OPT_OPTARG, option_fetch_parse_recurse_submodules), OPT_BOOL(0, "dry-run", &dry_run,@@ -1997,12 +1998,23 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, builtin_fetch_options, builtin_fetch_usage, 0); + if (recurse_submodules_explicit != RECURSE_SUBMODULES_DEFAULT) + recurse_submodules = recurse_submodules_explicit; + if (negotiate_only) { - /* - * --negotiate-only should never recurse into - * submodules, so there is no need to read .gitmodules. - */ - recurse_submodules = RECURSE_SUBMODULES_OFF; + switch (recurse_submodules_explicit) { + case RECURSE_SUBMODULES_OFF: + case RECURSE_SUBMODULES_DEFAULT: { + /* + * --negotiate-only should never recurse into + * submodules, so there is no need to read .gitmodules. + */ + recurse_submodules = RECURSE_SUBMODULES_OFF; + break; + } + default: + die(_("--negotiate-only and --recurse-submodules cannot be used together")); + } }
Nice. Very cleanly done.