Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2022-05-26 02:42:49 +0300
committerJunio C Hamano <gitster@pobox.com>2022-05-26 02:42:49 +0300
commitfa61b7703e7f19f172af3311af8dc04581ecdf69 (patch)
tree9e91f24c9ed5d36a496752f437ab729bfea5e8cc /builtin
parent5ed49a75f3a76731547e8322118a0bea1dd93676 (diff)
parent0353c6881890db1302f0f1bdf85c6076eed61113 (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.c16
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;