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

Re: [PATCH 2/4] receive-pack: implement advertising and receiving push options

From
Shawn Pearce <spearce@spearce.org>
Date
Jul 10, 2016, 17:06 UTC
Message-ID
<CAJo=hJtUyF=-iZeA1qBi42KBCP0pE6KsK4_MDP4JZEOf-K0waQ@mail.gmail.com>
In-Reply-To
<20160709003113.26930-3-sbeller@google.com>
On Fri, Jul 8, 2016 at 5:31 PM, Stefan Beller <sbeller@google.com> wrote:
Show 13 quoted lines
> +
> +       /* NEEDSWORK: expose the limitations to be configurable. */
> +       int max_options = 32;
> +
> +       /*
> +        * NEEDSWORK: expose the limitations to be configurable;
> +        * Once the limit can be lifted, include a way for payloads
> +        * larger than one pkt, e.g allow a payload of up to
> +        * LARGE_PACKET_MAX - 1 only, and reserve the last byte
> +        * to indicate whether the next pkt continues with this
> +        * push option.
> +        */
> +       int max_size = 1024;

Instead of this, what about a new config variable receive.maxCommandBytes[1] that places a limit on the number of bytes of pkt-line data the client can supply in both the command list ("old new ref"), push signature framing, and option list?

Memory demands for the server are proportional to the data sent. A simple byte limit lets the user make the decision about how this gets used. Longer ref names or option values means fewer refs or options can be sent. Shorter ref names or option values means more values or options can be sent.

I studied a lot of repositories[2] and most use ref names under 200 bytes in length. A 3 MiB default for receive.maxCommandBytes gives users something like 11,115 references in a single git push invocation if they used all 200 bytes in every name. Most users don't have ref names this long. Unlike a cap on each ref, it allows users to use the full 65449 bytes in a reference name available in pkt-line, but you can only send 48 such references. Likewise for options. :)

[1] I may propose this to JGit. [2] More than 3M, but maybe Peff has access to more.

Previous: Stefan BellerNext: Stefan Beller
Message 4 of 9 in “[PATCHv4 0/4] Push options”
  1. Stefan BellerJul 9, 2016
  2. 1/4 push options: {pre,post}-receive hook learns about push optionsStefan Beller, Jul 9, 2016
  3. 2/4 receive-pack: implement advertising and receiving push optionsStefan Beller, Jul 9, 2016
  4. Shawn PearceJul 10, 2016
  5. Stefan BellerJul 10, 2016
  6. Shawn PearceJul 12, 2016
  7. Jeff KingJul 12, 2016
  8. 3/4 push: accept push optionsStefan Beller, Jul 9, 2016
  9. 4/4 add a test for push optionsStefan Beller, Jul 9, 2016

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.