Changes in v5: * Tweaked the API of the packet_read_with_status function so that it wrote the pktlen value even in the presence of non-normal reads (flush, delim, EOF). * Changed the format of ref-patterns for the ls-refs server command. They are now ref-prefixes and matching is done as a simple prefix match against refnames. * Tweaked the API for server commands. Instead of the server code dispatching the command and passing it an argv_array of keys and args, I changed it so that it passes it an argv_array of keys and then passes off the packet_reader so that the command can do the reading of the remainder of the input itself. This is to account for future commands (e.g. push) where the argument stream will include a packfile and doesn't make much sense to push into an argv_array. * Various documentation changes, one of which calls out that the protocol is stateless by default and if state needs to be introduced at a later point, it must be hidden behind a capability which is only advertised when using transports which support state on the server side. v4 found at: https://public-inbox.org/git/20180228232252.102167-1-bmwill@xxxxxxxxxx/ Brandon Williams (35): pkt-line: introduce packet_read_with_status pkt-line: allow peeking a packet line without consuming it 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 test-pkt-line: introduce a packet-line test helper serve: introduce git-serve ls-refs: introduce ls-refs server command connect: request remote refs using v2 transport: convert get_refs_list to take a list of ref prefixes transport: convert transport_get_remote_refs to take a list of ref prefixes ls-remote: pass ref prefixes when requesting a remote's refs fetch: pass ref prefixes when fetching push: pass ref prefixes when pushing upload-pack: introduce fetch server command fetch-pack: perform a fetch using v2 fetch-pack: support shallow requests connect: refactor git_connect to only get the protocol version once connect: don't request v2 when pushing transport-helper: remove name parameter transport-helper: refactor process_connect_service transport-helper: introduce stateless-connect pkt-line: add packet_buf_write_len function remote-curl: create copy of the service name remote-curl: store the protocol version the server responded with http: allow providing extra headers for http requests http: don't always add Git-Protocol header http: eliminate "# service" line when using protocol v2 remote-curl: implement stateless-connect command remote-curl: don't request v2 when pushing .gitignore | 1 + Documentation/Makefile | 1 + Documentation/gitremote-helpers.txt | 32 ++ Documentation/technical/protocol-v2.txt | 398 +++++++++++++++ Makefile | 7 +- builtin.h | 2 + builtin/clone.c | 2 +- builtin/fetch-pack.c | 20 +- builtin/fetch.c | 21 +- builtin/ls-remote.c | 15 +- builtin/receive-pack.c | 6 + builtin/remote.c | 2 +- builtin/send-pack.c | 20 +- builtin/serve.c | 30 ++ builtin/upload-pack.c | 74 +++ connect.c | 364 ++++++++++---- connect.h | 7 + fetch-pack.c | 339 ++++++++++++- fetch-pack.h | 4 +- git.c | 2 + http-backend.c | 8 +- http.c | 25 +- http.h | 7 + ls-refs.c | 96 ++++ ls-refs.h | 10 + pkt-line.c | 133 ++++- pkt-line.h | 78 +++ protocol.c | 2 + protocol.h | 1 + refs.c | 14 + refs.h | 7 + remote-curl.c | 280 ++++++++++- remote.h | 11 +- serve.c | 257 ++++++++++ serve.h | 15 + t/helper/test-pkt-line.c | 64 +++ t/t5701-git-serve.sh | 176 +++++++ t/t5702-protocol-v2.sh | 273 +++++++++++ transport-helper.c | 87 ++-- transport-internal.h | 11 +- transport.c | 130 +++-- transport.h | 18 +- upload-pack.c | 615 ++++++++++++++++++------ upload-pack.h | 23 + 44 files changed, 3320 insertions(+), 368 deletions(-) create mode 100644 Documentation/technical/protocol-v2.txt create mode 100644 builtin/serve.c create mode 100644 builtin/upload-pack.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 100644 t/helper/test-pkt-line.c create mode 100755 t/t5701-git-serve.sh create mode 100755 t/t5702-protocol-v2.sh create mode 100644 upload-pack.h base-commit: 5be1f00a9a701532232f57958efab4be8c959a29 -- 2.16.2.804.g6dcf76e118-goog