fetch: download bundles once, even with --all

When fetch.bundleURI is set, 'git fetch' downloads bundles from the
given bundle URI before fetching from the specified remote. However,
when using non-file remotes, 'git fetch --all' will launch 'git fetch'
subprocesses which then read fetch.bundleURI and fetch the bundle list
again. We do not expect the bundle list to have new information during
these multiple runs, so avoid these extra calls by un-setting
fetch.bundleURI in the subprocess arguments.

Be careful to skip fetching bundles for the empty bundle string.
Fetching bundles from the empty list presents some interesting test
failures.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee
2023-03-31 15:59:04 +00:00
committed by Junio C Hamano
parent 6369acd968
commit 25bccb4b79
3 changed files with 49 additions and 1 deletions

View File

@ -792,6 +792,15 @@ int fetch_bundle_uri(struct repository *r, const char *uri,
init_bundle_list(&list);
/*
* Do not fetch a NULL or empty bundle URI. An empty bundle URI
* could signal that a configured bundle URI has been disabled.
*/
if (!uri || !*uri) {
result = 0;
goto cleanup;
}
/* If a bundle is added to this global list, then it is required. */
list.mode = BUNDLE_MODE_ALL;