fetch: fix `--no-recurse-submodules` with multi-remote fetches
When running `git fetch --no-recurse-submodules`, the exectation is that we don't fetch any submodules. And while this works for fetches of a single remote, it doesn't when fetching multiple remotes at once. The result is that we do recurse into submodules even though the user has explicitly asked us not to. This is because while we pass on `--recurse-submodules={yes,on-demand}` if specified by the user, we don't pass on `--no-recurse-submodules` to the subprocess spawned to perform the submodule fetch. Fix this by also forwarding this flag as expected. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
May 10, 2023 at 14:34 UTC
5667141e3b2a5a9f983882df3a3b1f481ce9be88
2 files changed
+15
builtin/fetch.c
+2
@@ -1879,6 +1879,8 @@ static void add_options_to_argv(struct strvec *argv)
1879
strvec_push(argv, "--keep");
1880
if (recurse_submodules == RECURSE_SUBMODULES_ON)
1881
strvec_push(argv, "--recurse-submodules");
1882
+ else if (recurse_submodules == RECURSE_SUBMODULES_OFF)
1883
+ strvec_push(argv, "--no-recurse-submodules");
1884
else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
1885
strvec_push(argv, "--recurse-submodules=on-demand");
1886
if (tags == TAGS_SET)
t/t5526-fetch-submodules.sh
+13
@@ -1180,4 +1180,17 @@ test_expect_success 'fetch --all with --recurse-submodules with multiple' '
1180
test_line_count = 2 fetch-subs
1181
'
1182
1183
+test_expect_success "fetch --all with --no-recurse-submodules only fetches superproject" '
1184
+ test_when_finished "rm -rf src_clone" &&
1185
+
1186
+ git clone --recurse-submodules src src_clone &&
1187
+ (
1188
+ cd src_clone &&
1189
+ git remote add secondary ../src &&
1190
+ git config submodule.recurse true &&
1191
+ git fetch --all --no-recurse-submodules 2>../fetch-log
1192
+ ) &&
1193
+ ! grep "Fetching submodule" fetch-log
1194
+'
1195
+
1196
test_done