Teach "git fetch" to avoid reading the submodule config until necessary. This allows users to avoid the lazy-fetching of this potentially missing config file by specifying the --recurse-submodules=no command line option. Signed-off-by: Jonathan Tan <jonathantanmy@xxxxxxxxxx> --- builtin/fetch.c | 10 ++++++++-- submodule-config.c | 5 +++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/builtin/fetch.c b/builtin/fetch.c index a5498646bf..29db219c68 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1786,12 +1786,18 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) free(anon); } - fetch_config_from_gitmodules(&submodule_fetch_jobs_config, - &recurse_submodules); git_config(git_fetch_config, NULL); argc = parse_options(argc, argv, prefix, builtin_fetch_options, builtin_fetch_usage, 0); + if (recurse_submodules != RECURSE_SUBMODULES_OFF) { + int *sfjc = submodule_fetch_jobs_config == -1 + ? &submodule_fetch_jobs_config : NULL; + int *rs = recurse_submodules == RECURSE_SUBMODULES_DEFAULT + ? &recurse_submodules : NULL; + + fetch_config_from_gitmodules(sfjc, rs); + } if (deepen_relative) { if (deepen_relative < 0) diff --git a/submodule-config.c b/submodule-config.c index e175dfbc38..8d65273ed2 100644 --- a/submodule-config.c +++ b/submodule-config.c @@ -776,10 +776,11 @@ struct fetch_config { static int gitmodules_fetch_config(const char *var, const char *value, void *cb) { struct fetch_config *config = cb; - if (!strcmp(var, "submodule.fetchjobs")) { + if (!strcmp(var, "submodule.fetchjobs") && config->max_children) { *(config->max_children) = parse_submodule_fetchjobs(var, value); return 0; - } else if (!strcmp(var, "fetch.recursesubmodules")) { + } else if (!strcmp(var, "fetch.recursesubmodules") && + config->recurse_submodules) { *(config->recurse_submodules) = parse_fetch_recurse_submodules_arg(var, value); return 0; } -- 2.28.0.236.gb10cc79966-goog