Subject: Re: [PATCH 0/6] Push negotiation

From: Junio C Hamano <[email-masked]>
Date: Fri, 30 Apr 2021 14:42:32 +0900

Jonathan Tan <[email-masked]> 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/[email-masked]/

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(-)