forked from git/git
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fetch-pack: introduce negotiator API
Introduce the new files fetch-negotiator.{h,c}, which contains an API behind which the details of negotiation are abstracted. Currently, only one algorithm is available: the existing one. This patch is written to be easily reviewed: static functions are moved verbatim from fetch-pack.c to negotiator/default.c, and it can be seen that the lines replaced by negotiator->X() calls are present in the X() functions respectively. Signed-off-by: Jonathan Tan <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
- Loading branch information
1 parent
d093bc7
commit ec06283
Showing
7 changed files
with
292 additions
and
167 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#include "git-compat-util.h" | ||
#include "fetch-negotiator.h" | ||
#include "negotiator/default.h" | ||
|
||
void fetch_negotiator_init(struct fetch_negotiator *negotiator) | ||
{ | ||
default_negotiator_init(negotiator); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
#ifndef FETCH_NEGOTIATOR | ||
#define FETCH_NEGOTIATOR | ||
|
||
struct commit; | ||
|
||
/* | ||
* An object that supplies the information needed to negotiate the contents of | ||
* the to-be-sent packfile during a fetch. | ||
* | ||
* To set up the negotiator, call fetch_negotiator_init(), then known_common() | ||
* (0 or more times), then add_tip() (0 or more times). | ||
* | ||
* Then, when "have" lines are required, call next(). Call ack() to report what | ||
* the server tells us. | ||
* | ||
* Once negotiation is done, call release(). The negotiator then cannot be used | ||
* (unless reinitialized with fetch_negotiator_init()). | ||
*/ | ||
struct fetch_negotiator { | ||
/* | ||
* Before negotiation starts, indicate that the server is known to have | ||
* this commit. | ||
*/ | ||
void (*known_common)(struct fetch_negotiator *, struct commit *); | ||
|
||
/* | ||
* Once this function is invoked, known_common() cannot be invoked any | ||
* more. | ||
* | ||
* Indicate that this commit and all its ancestors are to be checked | ||
* for commonality with the server. | ||
*/ | ||
void (*add_tip)(struct fetch_negotiator *, struct commit *); | ||
|
||
/* | ||
* Once this function is invoked, known_common() and add_tip() cannot | ||
* be invoked any more. | ||
* | ||
* Return the next commit that the client should send as a "have" line. | ||
*/ | ||
const struct object_id *(*next)(struct fetch_negotiator *); | ||
|
||
/* | ||
* Inform the negotiator that the server has the given commit. This | ||
* method must only be called on commits returned by next(). | ||
*/ | ||
int (*ack)(struct fetch_negotiator *, struct commit *); | ||
|
||
void (*release)(struct fetch_negotiator *); | ||
|
||
/* internal use */ | ||
void *data; | ||
}; | ||
|
||
void fetch_negotiator_init(struct fetch_negotiator *negotiator); | ||
|
||
#endif |
Oops, something went wrong.