To make extending this logic later easier.

Signed-off-by: Heiko Voigt <hvo...@hvoigt.net>
---
 submodule.c | 50 +++++++++++++++++++++++++++-----------------------
 1 file changed, 27 insertions(+), 23 deletions(-)

diff --git a/submodule.c b/submodule.c
index b603000..a6fe16e 100644
--- a/submodule.c
+++ b/submodule.c
@@ -737,6 +737,23 @@ static void calculate_changed_submodule_paths(void)
        submodule_config_cache_free(&submodule_config_cache);
 }
 
+static int get_fetch_recurse_config(const char *name, int command_line_option)
+{
+       if (command_line_option != RECURSE_SUBMODULES_DEFAULT)
+               return command_line_option;
+
+       struct string_list_item *fetch_recurse_submodules_option;
+       fetch_recurse_submodules_option = 
unsorted_string_list_lookup(&config_fetch_recurse_submodules_for_name, name);
+       if (fetch_recurse_submodules_option)
+               /* local config overrules everything except commandline */
+               return (intptr_t)fetch_recurse_submodules_option->util;
+
+       if (gitmodules_is_unmerged)
+               return RECURSE_SUBMODULES_OFF;
+
+       return config_fetch_recurse_submodules;
+}
+
 int fetch_populated_submodules(const struct argv_array *options,
                               const char *prefix, int command_line_option,
                               int quiet)
@@ -781,32 +798,19 @@ int fetch_populated_submodules(const struct argv_array 
*options,
                if (name_for_path)
                        name = name_for_path->util;
 
-               default_argv = "yes";
-               if (command_line_option == RECURSE_SUBMODULES_DEFAULT) {
-                       struct string_list_item 
*fetch_recurse_submodules_option;
-                       fetch_recurse_submodules_option = 
unsorted_string_list_lookup(&config_fetch_recurse_submodules_for_name, name);
-                       if (fetch_recurse_submodules_option) {
-                               if 
((intptr_t)fetch_recurse_submodules_option->util == RECURSE_SUBMODULES_OFF)
-                                       continue;
-                               if 
((intptr_t)fetch_recurse_submodules_option->util == 
RECURSE_SUBMODULES_ON_DEMAND) {
-                                       if 
(!unsorted_string_list_lookup(&changed_submodule_names, name))
-                                               continue;
-                                       default_argv = "on-demand";
-                               }
-                       } else {
-                               if ((config_fetch_recurse_submodules == 
RECURSE_SUBMODULES_OFF) ||
-                                   gitmodules_is_unmerged)
-                                       continue;
-                               if (config_fetch_recurse_submodules == 
RECURSE_SUBMODULES_ON_DEMAND) {
-                                       if 
(!unsorted_string_list_lookup(&changed_submodule_names, name))
-                                               continue;
-                                       default_argv = "on-demand";
-                               }
-                       }
-               } else if (command_line_option == RECURSE_SUBMODULES_ON_DEMAND) 
{
+               switch (get_fetch_recurse_config(name, command_line_option)) {
+               default:
+               case RECURSE_SUBMODULES_DEFAULT:
+               case RECURSE_SUBMODULES_ON_DEMAND:
                        if 
(!unsorted_string_list_lookup(&changed_submodule_names, 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", work_tree, ce->name);
-- 
1.8.2.rc0.25.g5062c01

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to