Brandon Williams <bmwill@xxxxxxxxxx> writes: > On 10/16, Heiko Voigt wrote: >> To make extending this logic later easier. > > This makes things so much clearer, thanks! I agree that it is clear to see what the code after the patch does, but the code before the patch is so convoluted to follow that it is a bit hard to see if the code before and after are doing the same thing, though ;-) > >> >> Signed-off-by: Heiko Voigt <hvoigt@xxxxxxxxxx> >> --- >> submodule.c | 74 ++++++++++++++++++++++++++++++------------------------------- >> 1 file changed, 37 insertions(+), 37 deletions(-) >> >> diff --git a/submodule.c b/submodule.c >> index 71d1773e2e..82d206eb65 100644 >> --- a/submodule.c >> +++ b/submodule.c >> @@ -1187,6 +1187,31 @@ struct submodule_parallel_fetch { >> }; >> #define SPF_INIT {0, ARGV_ARRAY_INIT, NULL, NULL, 0, 0, 0, 0} >> >> +static int get_fetch_recurse_config(const struct submodule *submodule, >> + struct submodule_parallel_fetch *spf) >> +{ >> + if (spf->command_line_option != RECURSE_SUBMODULES_DEFAULT) >> + return spf->command_line_option; >> + >> + if (submodule) { >> + char *key; >> + const char *value; >> + >> + int 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) >> + /* local config overrules everything except commandline */ >> + return fetch_recurse; >> + } >> + >> + return spf->default_option; >> +} >> + >> static int get_next_submodule(struct child_process *cp, >> struct strbuf *err, void *data, void **task_cb) >> { >> @@ -1214,46 +1239,21 @@ static int get_next_submodule(struct child_process *cp, >> } >> } >> >> - default_argv = "yes"; >> - if (spf->command_line_option == RECURSE_SUBMODULES_DEFAULT) { >> - 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 (fetch_recurse == RECURSE_SUBMODULES_ON_DEMAND) { >> - if (!unsorted_string_list_lookup(&changed_submodule_names, >> - submodule->name)) >> - continue; >> - default_argv = "on-demand"; >> - } >> - } else { >> - if (spf->default_option == RECURSE_SUBMODULES_OFF) >> - continue; >> - if (spf->default_option == RECURSE_SUBMODULES_ON_DEMAND) { >> - if (!unsorted_string_list_lookup(&changed_submodule_names, >> - submodule->name)) >> - continue; >> - default_argv = "on-demand"; >> - } >> - } >> - } else if (spf->command_line_option == RECURSE_SUBMODULES_ON_DEMAND) { >> - if (!unsorted_string_list_lookup(&changed_submodule_names, >> + switch (get_fetch_recurse_config(submodule, spf)) >> + { >> + default: >> + case RECURSE_SUBMODULES_DEFAULT: >> + case RECURSE_SUBMODULES_ON_DEMAND: >> + if (!submodule || !unsorted_string_list_lookup(&changed_submodule_names, >> submodule->name)) >> continue; >> default_argv = "on-demand"; >> + break; >> + case RECURSE_SUBMODULES_ON: >> + default_argv = "yes"; >> + break; >> + case RECURSE_SUBMODULES_OFF: >> + continue; >> } >> >> strbuf_addf(&submodule_path, "%s/%s", spf->work_tree, ce->name); >> -- >> 2.14.1.145.gb3622a4 >>