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