Don't rely on overlaying the repository's config on top of the submodule-config, instead query the repository's config directly for the fetch_recurse field. Signed-off-by: Brandon Williams <bmwill@xxxxxxxxxx> --- builtin/fetch.c | 1 - submodule.c | 24 +++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/builtin/fetch.c b/builtin/fetch.c index d84c26391..3fe99073d 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1362,7 +1362,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) if (recurse_submodules != RECURSE_SUBMODULES_OFF) { gitmodules_config(); - git_config(submodule_config, NULL); } if (all) { diff --git a/submodule.c b/submodule.c index 8b9e48a61..c5058a4b8 100644 --- a/submodule.c +++ b/submodule.c @@ -1210,14 +1210,24 @@ static int get_next_submodule(struct child_process *cp, default_argv = "yes"; if (spf->command_line_option == RECURSE_SUBMODULES_DEFAULT) { - if (submodule && - submodule->fetch_recurse != - RECURSE_SUBMODULES_NONE) { - if (submodule->fetch_recurse == - RECURSE_SUBMODULES_OFF) + int fetch_recurse = RECURSE_SUBMODULES_NONE; + + if (submodule) { + char *key; + const char *value; + + fetch_recurse = submodule->fetch_recurse; + key = xstrfmt("submodule.%s.fetchRecurseSubmodules", submodule->name); + if (!repo_config_get_string_const(the_repository, key, &value)) { + fetch_recurse = parse_fetch_recurse_submodules_arg(key, value); + } + free(key); + } + + if (fetch_recurse != RECURSE_SUBMODULES_NONE) { + if (fetch_recurse == RECURSE_SUBMODULES_OFF) continue; - if (submodule->fetch_recurse == - RECURSE_SUBMODULES_ON_DEMAND) { + if (fetch_recurse == RECURSE_SUBMODULES_ON_DEMAND) { if (!unsorted_string_list_lookup(&changed_submodule_paths, ce->name)) continue; default_argv = "on-demand"; -- 2.14.0.rc0.400.g1c36432dff-goog