X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=submodule.c;h=6f1c10722f744f4a27f18dae4867b15ecbf57d49;hb=d3ee177e5059c81e0e73be091741f60ebfbce520;hp=01d75f528b6a11428c099a0db46a6e345a552deb;hpb=be254a0ea99b441a6c514cb8b25cd72357383700;p=git.git diff --git a/submodule.c b/submodule.c index 01d75f528..6f1c10722 100644 --- a/submodule.c +++ b/submodule.c @@ -10,6 +10,7 @@ #include "string-list.h" struct string_list config_name_for_path; +struct string_list config_fetch_recurse_submodules_for_name; struct string_list config_ignore_for_name; static int config_fetch_recurse_submodules; @@ -105,6 +106,14 @@ int parse_submodule_config_option(const char *var, const char *value) config = string_list_append(&config_name_for_path, xstrdup(value)); config->util = strbuf_detach(&submodname, NULL); strbuf_release(&submodname); + } else if ((len > 23) && !strcmp(var + len - 23, ".fetchrecursesubmodules")) { + strbuf_add(&submodname, var, len - 23); + config = unsorted_string_list_lookup(&config_fetch_recurse_submodules_for_name, submodname.buf); + if (!config) + config = string_list_append(&config_fetch_recurse_submodules_for_name, + strbuf_detach(&submodname, NULL)); + config->util = git_config_bool(var, value) ? (void *)1 : NULL; + strbuf_release(&submodname); } else if ((len > 7) && !strcmp(var + len - 7, ".ignore")) { if (strcmp(value, "untracked") && strcmp(value, "dirty") && strcmp(value, "all") && strcmp(value, "none")) { @@ -255,7 +264,8 @@ int fetch_populated_submodules(int num_options, const char **options, if (read_cache() < 0) die("index file corrupt"); - argv = xcalloc(num_options + 5, sizeof(const char *)); + /* 4: "fetch" (options) "--submodule-prefix" prefix NULL */ + argv = xcalloc(num_options + 4, sizeof(const char *)); argv[argc++] = "fetch"; for (i = 0; i < num_options; i++) argv[argc++] = options[i]; @@ -283,8 +293,15 @@ int fetch_populated_submodules(int num_options, const char **options, name = name_for_path->util; if (!ignore_config) { - if (!config_fetch_recurse_submodules) - continue; + 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 (!fetch_recurse_submodules_option->util) + continue; + } else { + if (!config_fetch_recurse_submodules) + continue; + } } strbuf_addf(&submodule_path, "%s/%s", work_tree, ce->name);