A while back I sent out a rough outline for what a protocol version 2 would look like at https://public-inbox.org/git/20171020171839.4188-1-bmwill@xxxxxxxxxx/. After hacking at both the server and client code I've managed to get some patches for protocol version 2 which implement listing refs and cloning/fetching working. I still need to get the push side of things working before this would be viable to accept and apply but I figured this was in a good enough state to start getting some early feedback on the concept. I'm hoping that some comments and other pairs of eyes can help me identify deficiencies earlier rather than later. As a whole, fetch works fairly similar to the way it works in v1 except I removed the support for shallow clients for the time being in order to make it easier to implement at first. I haven't decided if it makes more sense to have the deepening as a separate server command or to keep it in fetch like it is in v1, just something to think about. Any comments or criticism is welcome. Thanks! Brandon Williams (15): pkt-line: introduce packet_read_with_status pkt-line: introduce struct packet_reader pkt-line: add delim packet support upload-pack: convert to a builtin upload-pack: factor out processing lines transport: use get_refs_via_connect to get refs connect: convert get_remote_heads to use struct packet_reader connect: discover protocol version outside of get_remote_heads transport: store protocol version protocol: introduce enum protocol_version value protocol_v2 serve: introduce git-serve ls-refs: introduce ls-refs server command connect: request remote refs using v2 upload_pack: introduce fetch server command fetch-pack: perform a fetch using v2 .gitignore | 1 + Makefile | 6 +- builtin.h | 2 + builtin/fetch-pack.c | 19 ++- builtin/receive-pack.c | 3 + builtin/send-pack.c | 18 ++- builtin/serve.c | 25 ++++ connect.c | 210 +++++++++++++++++++++--------- connect.h | 3 + fetch-pack.c | 237 +++++++++++++++++++++++++++++++++- fetch-pack.h | 4 +- git.c | 2 + ls-refs.c | 96 ++++++++++++++ ls-refs.h | 9 ++ pkt-line.c | 133 +++++++++++++++++-- pkt-line.h | 31 +++++ protocol.c | 2 + protocol.h | 1 + remote-curl.c | 21 ++- remote.h | 7 +- serve.c | 195 ++++++++++++++++++++++++++++ serve.h | 6 + t/t5701-protocol-v2.sh | 54 ++++++++ transport.c | 84 ++++++++---- upload-pack.c | 342 +++++++++++++++++++++++++++++++++++++++++++------ upload-pack.h | 9 ++ 26 files changed, 1371 insertions(+), 149 deletions(-) create mode 100644 builtin/serve.c create mode 100644 ls-refs.c create mode 100644 ls-refs.h create mode 100644 serve.c create mode 100644 serve.h create mode 100755 t/t5701-protocol-v2.sh create mode 100644 upload-pack.h -- 2.15.1.424.g9478a66081-goog