diff options
author | Junio C Hamano <gitster@pobox.com> | 2022-05-26 02:42:49 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-05-26 02:42:49 +0300 |
commit | fa61b7703e7f19f172af3311af8dc04581ecdf69 (patch) | |
tree | 9e91f24c9ed5d36a496752f437ab729bfea5e8cc /builtin | |
parent | 5ed49a75f3a76731547e8322118a0bea1dd93676 (diff) | |
parent | 0353c6881890db1302f0f1bdf85c6076eed61113 (diff) |
Merge branch 'jc/avoid-redundant-submodule-fetch'
"git fetch --recurse-submodules" from multiple remotes (either from
a remote group, or "--all") used to make one extra "git fetch" in
the submodules, which has been corrected.
* jc/avoid-redundant-submodule-fetch:
fetch: do not run a redundant fetch from submodule
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/fetch.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c index eeee5ac8f1..ac29c2b1ae 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -2188,6 +2188,10 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) else if (argc > 1) die(_("fetch --all does not make sense with refspecs")); (void) for_each_remote(get_one_remote_for_fetch, &list); + + /* do not do fetch_multiple() of one */ + if (list.nr == 1) + remote = remote_get(list.items[0].string); } else if (argc == 0) { /* No arguments -- use default remote */ remote = remote_get(NULL); @@ -2262,7 +2266,17 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) result = fetch_multiple(&list, max_children); } - if (!result && (recurse_submodules != RECURSE_SUBMODULES_OFF)) { + + /* + * This is only needed after fetch_one(), which does not fetch + * submodules by itself. + * + * When we fetch from multiple remotes, fetch_multiple() has + * already updated submodules to grab commits necessary for + * the fetched history from each remote, so there is no need + * to fetch submodules from here. + */ + if (!result && remote && (recurse_submodules != RECURSE_SUBMODULES_OFF)) { struct strvec options = STRVEC_INIT; int max_children = max_jobs; |