diff options
author | Junio C Hamano <gitster@pobox.com> | 2023-04-06 23:38:32 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-04-06 23:38:32 +0300 |
commit | 89833fc249189d5b91509b1b3f16b26aade9e7f7 (patch) | |
tree | 903a1a2e754e023eb2ad8ccdff2d8b6b75a91846 | |
parent | c5305bbe322edfadd746c162f8af090a227019b7 (diff) | |
parent | 25bccb4b79dce1d5c259228ef3c91eadcd13d8ac (diff) |
Merge branch 'ds/fetch-bundle-uri-with-all'
"git fetch --all" does not have to download and handle the same
bundleURI over and over, which has been corrected.
* ds/fetch-bundle-uri-with-all:
fetch: download bundles once, even with --all
-rw-r--r-- | builtin/fetch.c | 7 | ||||
-rw-r--r-- | bundle-uri.c | 9 | ||||
-rwxr-xr-x | t/t5558-clone-bundle-uri.sh | 34 |
3 files changed, 49 insertions, 1 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c index 662a842479..85bd280103 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1967,7 +1967,12 @@ static int fetch_multiple(struct string_list *list, int max_children) return errcode; } - strvec_pushl(&argv, "fetch", "--append", "--no-auto-gc", + /* + * Cancel out the fetch.bundleURI config when running subprocesses, + * to avoid fetching from the same bundle list multiple times. + */ + strvec_pushl(&argv, "-c", "fetch.bundleURI=", + "fetch", "--append", "--no-auto-gc", "--no-write-commit-graph", NULL); add_options_to_argv(&argv); diff --git a/bundle-uri.c b/bundle-uri.c index 1ff1cf51da..e2b267cc02 100644 --- a/bundle-uri.c +++ b/bundle-uri.c @@ -794,6 +794,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; diff --git a/t/t5558-clone-bundle-uri.sh b/t/t5558-clone-bundle-uri.sh index afd56926c5..996a08e90c 100755 --- a/t/t5558-clone-bundle-uri.sh +++ b/t/t5558-clone-bundle-uri.sh @@ -1018,6 +1018,40 @@ test_expect_success 'creationToken heuristic with failed downloads (fetch)' ' test_cmp expect refs ' +test_expect_success 'bundles are downloaded once during fetch --all' ' + test_when_finished rm -rf download-* trace*.txt fetch-mult && + + cat >"$HTTPD_DOCUMENT_ROOT_PATH/bundle-list" <<-EOF && + [bundle] + version = 1 + mode = all + heuristic = creationToken + + [bundle "bundle-1"] + uri = bundle-1.bundle + creationToken = 1 + + [bundle "bundle-2"] + uri = bundle-2.bundle + creationToken = 2 + + [bundle "bundle-3"] + uri = bundle-3.bundle + creationToken = 3 + EOF + + git clone --single-branch --branch=left \ + --bundle-uri="$HTTPD_URL/bundle-list" \ + "$HTTPD_URL/smart/fetch.git" fetch-mult && + git -C fetch-mult remote add dup1 "$HTTPD_URL/smart/fetch.git" && + git -C fetch-mult remote add dup2 "$HTTPD_URL/smart/fetch.git" && + + GIT_TRACE2_EVENT="$(pwd)/trace-mult.txt" \ + git -C fetch-mult fetch --all && + grep "\"child_start\".*\"git-remote-https\",\"$HTTPD_URL/bundle-list\"" \ + trace-mult.txt >bundle-fetches && + test_line_count = 1 bundle-fetches +' # Do not add tests here unless they use the HTTP server, as they will # not run unless the HTTP dependencies exist. |