#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 */