Merge branch 'cc/multi-promisor'
Teach the lazy clone machinery that there can be more than one promisor remote and consult them in order when downloading missing objects on demand. * cc/multi-promisor: Move core_partial_clone_filter_default to promisor-remote.c Move repository_format_partial_clone to promisor-remote.c Remove fetch-object.{c,h} in favor of promisor-remote.{c,h} remote: add promisor and partial clone config to the doc partial-clone: add multiple remotes in the doc t0410: test fetching from many promisor remotes builtin/fetch: remove unique promisor remote limitation promisor-remote: parse remote.*.partialclonefilter Use promisor_remote_get_direct() and has_promisor_remote() promisor-remote: use repository_format_partial_clone promisor-remote: add promisor_remote_reinit() promisor-remote: implement promisor_remote_get_direct() Add initial support for many promisor remotes fetch-object: make functions return an error code t0410: remove pipes after git commands
This commit is contained in:
@ -24,6 +24,7 @@
|
||||
#include "list-objects-filter-options.h"
|
||||
#include "commit-reach.h"
|
||||
#include "branch.h"
|
||||
#include "promisor-remote.h"
|
||||
|
||||
#define FORCED_UPDATES_DELAY_WARNING_IN_MS (10 * 1000)
|
||||
|
||||
@ -1559,37 +1560,27 @@ static inline void fetch_one_setup_partial(struct remote *remote)
|
||||
* If no prior partial clone/fetch and the current fetch DID NOT
|
||||
* request a partial-fetch, do a normal fetch.
|
||||
*/
|
||||
if (!repository_format_partial_clone && !filter_options.choice)
|
||||
if (!has_promisor_remote() && !filter_options.choice)
|
||||
return;
|
||||
|
||||
/*
|
||||
* If this is the FIRST partial-fetch request, we enable partial
|
||||
* on this repo and remember the given filter-spec as the default
|
||||
* for subsequent fetches to this remote.
|
||||
* If this is a partial-fetch request, we enable partial on
|
||||
* this repo if not already enabled and remember the given
|
||||
* filter-spec as the default for subsequent fetches to this
|
||||
* remote.
|
||||
*/
|
||||
if (!repository_format_partial_clone && filter_options.choice) {
|
||||
if (filter_options.choice) {
|
||||
partial_clone_register(remote->name, &filter_options);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* We are currently limited to only ONE promisor remote and only
|
||||
* allow partial-fetches from the promisor remote.
|
||||
*/
|
||||
if (strcmp(remote->name, repository_format_partial_clone)) {
|
||||
if (filter_options.choice)
|
||||
die(_("--filter can only be used with the remote "
|
||||
"configured in extensions.partialClone"));
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do a partial-fetch from the promisor remote using either the
|
||||
* explicitly given filter-spec or inherit the filter-spec from
|
||||
* the config.
|
||||
*/
|
||||
if (!filter_options.choice)
|
||||
partial_clone_get_default_filter_spec(&filter_options);
|
||||
partial_clone_get_default_filter_spec(&filter_options, remote->name);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1710,7 +1701,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
||||
if (depth || deepen_since || deepen_not.nr)
|
||||
deepen = 1;
|
||||
|
||||
if (filter_options.choice && !repository_format_partial_clone)
|
||||
if (filter_options.choice && !has_promisor_remote())
|
||||
die("--filter can only be used when extensions.partialClone is set");
|
||||
|
||||
if (all) {
|
||||
@ -1744,7 +1735,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
|
||||
if (remote) {
|
||||
if (filter_options.choice || repository_format_partial_clone)
|
||||
if (filter_options.choice || has_promisor_remote())
|
||||
fetch_one_setup_partial(remote);
|
||||
result = fetch_one(remote, argc, argv, prune_tags_ok);
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user