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
This commit is contained in:
commit
89833fc249
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user