Jonathan Tan <jonathantanmy@xxxxxxxxxx> writes: > Here are patches for push negotiation. The basic idea is that we can > reuse part of the fetch protocol (and code) to find out what is in > common between the client and server, and then use that information to > further narrow the objects sent in the packfile during a push. > > Patch 1 is a bug fix that probably should be merged even if the rest > aren't. Patches 2-4 are refactorings in preparation for the future > patches. Patches 5-6 contain the actual logic and documentation. > > I have written more about it in my prior work [1], although the commit > messages and documentation in patches 5-6 should be enough to explain > what's going on. (If they're not, feel free to make review comments.) > > The main change from [1] is that the client-side code that used to be in > builtin/fetch-pack.c is now in builtin/fetch.c, because I realized that > builtin/fetch-pack.c does not support HTTP. Other than that, all the > "what hasn't been done yet" items have been done except for statistics > in the commit message. > > [1] https://lore.kernel.org/git/20210218012100.928957-1-jonathantanmy@xxxxxxxxxx/ So... anybody else wants to review this and give it a-OK? > Jonathan Tan (6): > fetch-pack: buffer object-format with other args > fetch-pack: refactor process_acks() > fetch-pack: refactor add_haves() > fetch-pack: refactor command and capability write > fetch: teach independent negotiation (no packfile) > send-pack: support push negotiation > > Documentation/config/push.txt | 7 + > Documentation/technical/protocol-v2.txt | 8 + > builtin/fetch.c | 27 ++- > fetch-pack.c | 224 +++++++++++++++--------- > fetch-pack.h | 11 ++ > object.h | 2 +- > send-pack.c | 61 ++++++- > t/t5516-fetch-push.sh | 35 ++++ > t/t5701-git-serve.sh | 2 +- > t/t5702-protocol-v2.sh | 89 ++++++++++ > transport-helper.c | 10 ++ > transport.c | 30 +++- > transport.h | 6 + > upload-pack.c | 18 +- > 14 files changed, 430 insertions(+), 100 deletions(-)