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