git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v5 00/35] protocol version 2

From
BWBrandon Williams <bmwill@google.com>
Date
Mar 14, 2018, 18:31 UTC
Message-ID
<20180314183213.223440-1-bmwill@google.com>
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@google.com/

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
Next: Brandon Williams
Message 1 of 85 in “protocol version 2”
  1. 00/35 protocol version 2Brandon Williams, Mar 14, 2018
  2. 01/35 pkt-line: introduce packet_read_with_statusBrandon Williams, Mar 14, 2018
  3. Junio C HamanoMar 14, 2018
  4. Brandon WilliamsMar 15, 2018
  5. Junio C HamanoMar 15, 2018
  6. 02/35 pkt-line: allow peeking a packet line without consuming itBrandon Williams, Mar 14, 2018
  7. 03/35 pkt-line: add delim packet supportBrandon Williams, Mar 14, 2018
  8. 04/35 upload-pack: convert to a builtinBrandon Williams, Mar 14, 2018
  9. 07/35 connect: convert get_remote_heads to use struct packet_readerBrandon Williams, Mar 14, 2018
  10. 10/35 protocol: introduce enum protocol_version value protocol_v2Brandon Williams, Mar 14, 2018
  11. 11/35 test-pkt-line: introduce a packet-line test helperBrandon Williams, Mar 14, 2018
  12. 12/35 serve: introduce git-serveBrandon Williams, Mar 14, 2018
  13. Junio C HamanoMar 14, 2018
  14. Brandon WilliamsMar 15, 2018
  15. 14/35 connect: request remote refs using v2Brandon Williams, Mar 14, 2018
  16. 13/35 ls-refs: introduce ls-refs server commandBrandon Williams, Mar 14, 2018
  17. 18/35 fetch: pass ref prefixes when fetchingBrandon Williams, Mar 14, 2018
  18. 17/35 ls-remote: pass ref prefixes when requesting a remote's refsBrandon Williams, Mar 14, 2018
  19. 19/35 push: pass ref prefixes when pushingBrandon Williams, Mar 14, 2018
  20. 21/35 fetch-pack: perform a fetch using v2Brandon Williams, Mar 14, 2018
  21. 22/35 fetch-pack: support shallow requestsBrandon Williams, Mar 14, 2018
  22. 26/35 transport-helper: refactor process_connect_serviceBrandon Williams, Mar 14, 2018
  23. 27/35 transport-helper: introduce stateless-connectBrandon Williams, Mar 14, 2018
  24. 28/35 pkt-line: add packet_buf_write_len functionBrandon Williams, Mar 14, 2018
  25. 31/35 http: allow providing extra headers for http requestsBrandon Williams, Mar 14, 2018
  26. 29/35 remote-curl: create copy of the service nameBrandon Williams, Mar 14, 2018
  27. 32/35 http: don't always add Git-Protocol headerBrandon Williams, Mar 14, 2018
  28. 33/35 http: eliminate "# service" line when using protocol v2Brandon Williams, Mar 14, 2018
  29. 35/35 remote-curl: don't request v2 when pushingBrandon Williams, Mar 14, 2018
  30. 34/35 remote-curl: implement stateless-connect commandBrandon Williams, Mar 14, 2018
  31. 23/35 connect: refactor git_connect to only get the protocol version onceBrandon Williams, Mar 14, 2018
  32. 25/35 transport-helper: remove name parameterBrandon Williams, Mar 14, 2018
  33. 30/35 remote-curl: store the protocol version the server responded withBrandon Williams, Mar 14, 2018
  34. 20/35 upload-pack: introduce fetch server commandBrandon Williams, Mar 14, 2018
  35. 24/35 connect: don't request v2 when pushingBrandon Williams, Mar 14, 2018
  36. 15/35 transport: convert get_refs_list to take a list of ref prefixesBrandon Williams, Mar 14, 2018
  37. 16/35 transport: convert transport_get_remote_refs to take a list of ref prefixesBrandon Williams, Mar 14, 2018
  38. 08/35 connect: discover protocol version outside of get_remote_headsBrandon Williams, Mar 14, 2018
  39. 09/35 transport: store protocol versionBrandon Williams, Mar 14, 2018
  40. 05/35 upload-pack: factor out processing linesBrandon Williams, Mar 14, 2018
  41. 06/35 transport: use get_refs_via_connect to get refsBrandon Williams, Mar 14, 2018
  42. 00/35 protocol version 2Brandon Williams, Mar 15, 2018
  43. 01/35 pkt-line: introduce packet_read_with_statusBrandon Williams, Mar 15, 2018
  44. 02/35 pkt-line: allow peeking a packet line without consuming itBrandon Williams, Mar 15, 2018
  45. 03/35 pkt-line: add delim packet supportBrandon Williams, Mar 15, 2018
  46. 06/35 transport: use get_refs_via_connect to get refsBrandon Williams, Mar 15, 2018
  47. 07/35 connect: convert get_remote_heads to use struct packet_readerBrandon Williams, Mar 15, 2018
  48. Duy NguyenMar 27, 2018
  49. Jeff KingMar 27, 2018
  50. Duy NguyenMar 27, 2018
  51. Duy NguyenMar 27, 2018
  52. Brandon WilliamsMar 27, 2018
  53. 08/35 connect: discover protocol version outside of get_remote_headsBrandon Williams, Mar 15, 2018
  54. 09/35 transport: store protocol versionBrandon Williams, Mar 15, 2018
  55. 10/35 protocol: introduce enum protocol_version value protocol_v2Brandon Williams, Mar 15, 2018
  56. 11/35 test-pkt-line: introduce a packet-line test helperBrandon Williams, Mar 15, 2018
  57. 12/35 serve: introduce git-serveBrandon Williams, Mar 15, 2018
  58. 13/35 ls-refs: introduce ls-refs server commandBrandon Williams, Mar 15, 2018
  59. 16/35 transport: convert transport_get_remote_refs to take a list of ref prefixesBrandon Williams, Mar 15, 2018
  60. 17/35 ls-remote: pass ref prefixes when requesting a remote's refsBrandon Williams, Mar 15, 2018
  61. 18/35 fetch: pass ref prefixes when fetchingBrandon Williams, Mar 15, 2018
  62. 20/35 upload-pack: introduce fetch server commandBrandon Williams, Mar 15, 2018
  63. 19/35 push: pass ref prefixes when pushingBrandon Williams, Mar 15, 2018
  64. 22/35 fetch-pack: support shallow requestsBrandon Williams, Mar 15, 2018
  65. 27/35 transport-helper: introduce stateless-connectBrandon Williams, Mar 15, 2018
  66. 26/35 transport-helper: refactor process_connect_serviceBrandon Williams, Mar 15, 2018
  67. 29/35 remote-curl: create copy of the service nameBrandon Williams, Mar 15, 2018
  68. 30/35 remote-curl: store the protocol version the server responded withBrandon Williams, Mar 15, 2018
  69. 33/35 http: eliminate "# service" line when using protocol v2Brandon Williams, Mar 15, 2018
  70. 34/35 remote-curl: implement stateless-connect commandBrandon Williams, Mar 15, 2018
  71. 35/35 remote-curl: don't request v2 when pushingBrandon Williams, Mar 15, 2018
  72. 31/35 http: allow providing extra headers for http requestsBrandon Williams, Mar 15, 2018
  73. 32/35 http: don't always add Git-Protocol headerBrandon Williams, Mar 15, 2018
  74. 28/35 pkt-line: add packet_buf_write_len functionBrandon Williams, Mar 15, 2018
  75. 23/35 connect: refactor git_connect to only get the protocol version onceBrandon Williams, Mar 15, 2018
  76. 25/35 transport-helper: remove name parameterBrandon Williams, Mar 15, 2018
  77. 24/35 connect: don't request v2 when pushingBrandon Williams, Mar 15, 2018
  78. 21/35 fetch-pack: perform a fetch using v2Brandon Williams, Mar 15, 2018
  79. 14/35 connect: request remote refs using v2Brandon Williams, Mar 15, 2018
  80. 15/35 transport: convert get_refs_list to take a list of ref prefixesBrandon Williams, Mar 15, 2018
  81. 04/35 upload-pack: convert to a builtinBrandon Williams, Mar 15, 2018
  82. 05/35 upload-pack: factor out processing linesBrandon Williams, Mar 15, 2018
  83. {fetch,upload}-pack: clearly mark unreachable v2 codeÆvar Arnfjörð Bjarmason, Mar 30, 2018
  84. Brandon WilliamsMar 30, 2018
  85. Stefan BellerMar 30, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.