fetch-negotiator.hon commit Merge branch 'pw/cherry-pick-continue' (d2dba18)
   1#ifndef FETCH_NEGOTIATOR_H
   2#define FETCH_NEGOTIATOR_H
   3
   4struct 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 */
  19struct 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
  55void fetch_negotiator_init(struct fetch_negotiator *negotiator,
  56                           const char *algorithm);
  57
  58#endif