Thanks, Jonathan Nieder, for your comments. This patch set now includes a patch at the beginning to split up everything_local(), making it clear which functions have side effects and which don't, and a patch at the end to reformat some comments. While I was implementing the suggestions, there were some that I were unsure about. Here they are: > > nit: this adds the new test as last in the script. Is there some > > logical earlier place in the file it can go instead? That way, the > > file stays organized and concurrent patches that modify the same test > > script are less likely to conflict. > > Good point. I'll find a place. I couldn't find a logical place (I didn't see any existing tests that test negotiation). I did move it up a bit earlier in the file, before filtering by blob size, because that seemed more distinct from the rest of the tests. > >> -static struct prio_queue rev_list = { compare_commits_by_commit_date }; > >> -static int non_common_revs, multi_ack, use_sideband; > >> +struct data { > >> + struct prio_queue rev_list; > >> + int non_common_revs; > >> +}; > > > > How does this struct get used? What does it represent? A comment > > might help. > > I'll add a comment. I thought of adding a comment, but felt that I would end up removing it anyway upon its move to negotiator/default.c, so I didn't end up adding it. > >> +/* > >> + This function marks a rev and its ancestors as common. > >> + In some cases, it is desirable to mark only the ancestors (for example > >> + when only the server does not yet know that they are common). > >> +*/ > > > > Not about this change: comments should have ' *' at the start of each > > line (could do in a preparatory patch or a followup). > > I'll add a followup. I'm now not sure of the value of making a change just to update formatting, but I added the followup commit anyway - it can be easily dropped if we decide to do so. Jonathan Tan (8): fetch-pack: split up everything_local() fetch-pack: clear marks before re-marking fetch-pack: directly end negotiation if ACK ready fetch-pack: use ref adv. to prune "have" sent fetch-pack: make negotiation-related vars local fetch-pack: move common check and marking together fetch-pack: introduce negotiator API negotiator/default: use better style in comments Makefile | 2 + fetch-negotiator.c | 8 ++ fetch-negotiator.h | 57 ++++++++++ fetch-pack.c | 254 ++++++++++++++---------------------------- negotiator/default.c | 174 +++++++++++++++++++++++++++++ negotiator/default.h | 8 ++ object.h | 3 +- t/t5500-fetch-pack.sh | 39 +++++++ 8 files changed, 376 insertions(+), 169 deletions(-) create mode 100644 fetch-negotiator.c create mode 100644 fetch-negotiator.h create mode 100644 negotiator/default.c create mode 100644 negotiator/default.h -- 2.17.0.768.g1526ddbba1.dirty