]>
Commit | Line | Data |
---|---|---|
ec062838 JT |
1 | #ifndef FETCH_NEGOTIATOR |
2 | #define FETCH_NEGOTIATOR | |
3 | ||
4 | struct commit; | |
5 | ||
6 | /* | |
7 | * An object that supplies the information needed to negotiate the contents of | |
8 | * the to-be-sent packfile during a fetch. | |
9 | * | |
10 | * To set up the negotiator, call fetch_negotiator_init(), then known_common() | |
11 | * (0 or more times), then add_tip() (0 or more times). | |
12 | * | |
13 | * Then, when "have" lines are required, call next(). Call ack() to report what | |
14 | * the server tells us. | |
15 | * | |
16 | * Once negotiation is done, call release(). The negotiator then cannot be used | |
17 | * (unless reinitialized with fetch_negotiator_init()). | |
18 | */ | |
19 | struct fetch_negotiator { | |
20 | /* | |
21 | * Before negotiation starts, indicate that the server is known to have | |
22 | * this commit. | |
23 | */ | |
24 | void (*known_common)(struct fetch_negotiator *, struct commit *); | |
25 | ||
26 | /* | |
27 | * Once this function is invoked, known_common() cannot be invoked any | |
28 | * more. | |
29 | * | |
30 | * Indicate that this commit and all its ancestors are to be checked | |
31 | * for commonality with the server. | |
32 | */ | |
33 | void (*add_tip)(struct fetch_negotiator *, struct commit *); | |
34 | ||
35 | /* | |
36 | * Once this function is invoked, known_common() and add_tip() cannot | |
37 | * be invoked any more. | |
38 | * | |
39 | * Return the next commit that the client should send as a "have" line. | |
40 | */ | |
41 | const struct object_id *(*next)(struct fetch_negotiator *); | |
42 | ||
43 | /* | |
44 | * Inform the negotiator that the server has the given commit. This | |
45 | * method must only be called on commits returned by next(). | |
46 | */ | |
47 | int (*ack)(struct fetch_negotiator *, struct commit *); | |
48 | ||
49 | void (*release)(struct fetch_negotiator *); | |
50 | ||
51 | /* internal use */ | |
52 | void *data; | |
53 | }; | |
54 | ||
42cc7485 JT |
55 | void fetch_negotiator_init(struct fetch_negotiator *negotiator, |
56 | const char *algorithm); | |
ec062838 JT |
57 | |
58 | #endif |