submodule: simplify decision tree whether to or not to fetch

To make extending this logic later easier. Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Heiko Voigt committed Oct 16, 2017 at 15:59 UTC 4b4acedd61c4a6108dc0931e1677b286683e4dbd
1 file changed +37 -37
submodule.c
+37 -37
@@ -1187,6 +1187,31 @@ struct submodule_parallel_fetch {
1187 };
1188 #define SPF_INIT {0, ARGV_ARRAY_INIT, NULL, NULL, 0, 0, 0, 0}
1189
1190 +static int get_fetch_recurse_config(const struct submodule *submodule,
1191 + struct submodule_parallel_fetch *spf)
1192 +{
1193 + if (spf->command_line_option != RECURSE_SUBMODULES_DEFAULT)
1194 + return spf->command_line_option;
1195 +
1196 + if (submodule) {
1197 + char *key;
1198 + const char *value;
1199 +
1200 + int fetch_recurse = submodule->fetch_recurse;
1201 + key = xstrfmt("submodule.%s.fetchRecurseSubmodules", submodule->name);
1202 + if (!repo_config_get_string_const(the_repository, key, &value)) {
1203 + fetch_recurse = parse_fetch_recurse_submodules_arg(key, value);
1204 + }
1205 + free(key);
1206 +
1207 + if (fetch_recurse != RECURSE_SUBMODULES_NONE)
1208 + /* local config overrules everything except commandline */
1209 + return fetch_recurse;
1210 + }
1211 +
1212 + return spf->default_option;
1213 +}
1214 +
1215 static int get_next_submodule(struct child_process *cp,
1216 struct strbuf *err, void *data, void **task_cb)
1217 {
@@ -1214,46 +1239,21 @@ static int get_next_submodule(struct child_process *cp,
1239 }
1240 }
1241
1217 - default_argv = "yes";
1218 - if (spf->command_line_option == RECURSE_SUBMODULES_DEFAULT) {
1219 - int fetch_recurse = RECURSE_SUBMODULES_NONE;
1220 -
1221 - if (submodule) {
1222 - char *key;
1223 - const char *value;
1224 -
1225 - fetch_recurse = submodule->fetch_recurse;
1226 - key = xstrfmt("submodule.%s.fetchRecurseSubmodules", submodule->name);
1227 - if (!repo_config_get_string_const(the_repository, key, &value)) {
1228 - fetch_recurse = parse_fetch_recurse_submodules_arg(key, value);
1229 - }
1230 - free(key);
1231 - }
1232 -
1233 - if (fetch_recurse != RECURSE_SUBMODULES_NONE) {
1234 - if (fetch_recurse == RECURSE_SUBMODULES_OFF)
1235 - continue;
1236 - if (fetch_recurse == RECURSE_SUBMODULES_ON_DEMAND) {
1237 - if (!unsorted_string_list_lookup(&changed_submodule_names,
1238 - submodule->name))
1239 - continue;
1240 - default_argv = "on-demand";
1241 - }
1242 - } else {
1243 - if (spf->default_option == RECURSE_SUBMODULES_OFF)
1244 - continue;
1245 - if (spf->default_option == RECURSE_SUBMODULES_ON_DEMAND) {
1246 - if (!unsorted_string_list_lookup(&changed_submodule_names,
1247 - submodule->name))
1248 - continue;
1249 - default_argv = "on-demand";
1250 - }
1251 - }
1252 - } else if (spf->command_line_option == RECURSE_SUBMODULES_ON_DEMAND) {
1253 - if (!unsorted_string_list_lookup(&changed_submodule_names,
1242 + switch (get_fetch_recurse_config(submodule, spf))
1243 + {
1244 + default:
1245 + case RECURSE_SUBMODULES_DEFAULT:
1246 + case RECURSE_SUBMODULES_ON_DEMAND:
1247 + if (!submodule || !unsorted_string_list_lookup(&changed_submodule_names,
1248 submodule->name))
1249 continue;
1250 default_argv = "on-demand";
1251 + break;
1252 + case RECURSE_SUBMODULES_ON:
1253 + default_argv = "yes";
1254 + break;
1255 + case RECURSE_SUBMODULES_OFF:
1256 + continue;
1257 }
1258
1259 strbuf_addf(&submodule_path, "%s/%s", spf->work_tree, ce->name);