diff options
Diffstat (limited to 'promisor-remote.h')
-rw-r--r-- | promisor-remote.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/promisor-remote.h b/promisor-remote.h new file mode 100644 index 0000000000..263d331a55 --- /dev/null +++ b/promisor-remote.h @@ -0,0 +1,70 @@ +#ifndef PROMISOR_REMOTE_H +#define PROMISOR_REMOTE_H + +#include "repository.h" + +struct object_id; + +/* + * Promisor remote linked list + * + * Information in its fields come from remote.XXX config entries or + * from extensions.partialclone, except for 'accepted' which comes + * from protocol v2 capabilities exchange. + */ +struct promisor_remote { + struct promisor_remote *next; + char *partial_clone_filter; + unsigned int accepted : 1; + const char name[FLEX_ARRAY]; +}; + +void repo_promisor_remote_reinit(struct repository *r); +void promisor_remote_clear(struct promisor_remote_config *config); +struct promisor_remote *repo_promisor_remote_find(struct repository *r, const char *remote_name); +int repo_has_promisor_remote(struct repository *r); + +/* + * Fetches all requested objects from all promisor remotes, trying them one at + * a time until all objects are fetched. + * + * If oid_nr is 0, this function returns immediately. + */ +void promisor_remote_get_direct(struct repository *repo, + const struct object_id *oids, + int oid_nr); + +/* + * Prepare a "promisor-remote" advertisement by a server. + * Check the value of "promisor.advertise" and maybe the configured + * promisor remotes, if any, to prepare information to send in an + * advertisement. + * Return value is NULL if no promisor remote advertisement should be + * made. Otherwise it contains the names and urls of the advertised + * promisor remotes separated by ';'. See gitprotocol-v2(5). + */ +char *promisor_remote_info(struct repository *repo); + +/* + * Prepare a reply to a "promisor-remote" advertisement from a server. + * Check the value of "promisor.acceptfromserver" and maybe the + * configured promisor remotes, if any, to prepare the reply. + * Return value is NULL if no promisor remote from the server + * is accepted. Otherwise it contains the names of the accepted promisor + * remotes separated by ';'. See gitprotocol-v2(5). + */ +char *promisor_remote_reply(const char *info); + +/* + * Set the 'accepted' flag for some promisor remotes. Useful on the + * server side when some promisor remotes have been accepted by the + * client. + */ +void mark_promisor_remotes_as_accepted(struct repository *repo, const char *remotes); + +/* + * Has any promisor remote been accepted by the client? + */ +int repo_has_accepted_promisor_remote(struct repository *r); + +#endif /* PROMISOR_REMOTE_H */ |