mbox series

[0/4] "Push" protocol change proposal: user-specified base

Message ID cover.1604362701.git.jonathantanmy@google.com (mailing list archive)
Headers show
Series "Push" protocol change proposal: user-specified base | expand

Message

Jonathan Tan Nov. 3, 2020, 12:26 a.m. UTC
At $DAY_JOB, we've noticed some pushes being larger than necessary.
Here's a first step towards solving that. In this protocol change, we're
allowing the user to specify an ancestor believed to be common; if the
server agrees, the server sends that ancestor as the lone so-called ref
being advertised instead of the full ref advertisement. Not only does
this save bandwidth for the ref advertisement, but this avoids the issue
of the server's refs being ahead of the client (and thus the client
cannot use them since it is unaware of those objects).

More information (including a design doc) can be found in the
documentation patch.

This works for file://, ssh://, and http(s)://.

One last concern I had is the locations of the tests - I just bundled
the protocol v0 ones with their corresponding protocol v1 ones, as I
couldn't find good places to put them.

Jonathan Tan (4):
  connect: refactor building of Extra Parameters
  push: teach --base for ssh:// and file://
  remote-curl: teach --base for http(s)://
  Doc: push with --base

 Documentation/gitremote-helpers.txt        |   8 ++
 Documentation/technical/pack-protocol.txt  |  10 +-
 Documentation/technical/push-with-base.txt |  61 ++++++++++++
 builtin/fetch-pack.c                       |   2 +-
 builtin/push.c                             |  12 ++-
 builtin/receive-pack.c                     |  46 ++++++++-
 builtin/send-pack.c                        |   2 +-
 builtin/upload-pack.c                      |   2 +-
 connect.c                                  |  39 +++++---
 connect.h                                  |   4 +-
 http-backend.c                             |   2 +-
 protocol.c                                 |   5 +-
 protocol.h                                 |   5 +-
 remote-curl.c                              |  25 +++--
 t/t5700-protocol-v1.sh                     | 110 +++++++++++++++++++++
 transport-helper.c                         |  15 +++
 transport.c                                |  14 ++-
 transport.h                                |   9 ++
 18 files changed, 332 insertions(+), 39 deletions(-)
 create mode 100644 Documentation/technical/push-with-base.txt

Comments

Junio C Hamano Nov. 3, 2020, 12:46 a.m. UTC | #1
Jonathan Tan <jonathantanmy@google.com> writes:

> At $DAY_JOB, we've noticed some pushes being larger than necessary.
> Here's a first step towards solving that. In this protocol change, we're
> allowing the user to specify an ancestor believed to be common

Is this designed to be a short-term kludge until we have a similar
"common discovery" negotiation we have on the upload-pack side, or
do we know some fundamental reason why the "push" side cannot do so?

Just being curious as to what the eventual and ideal future beyond
"we must have an immediate problem worked around in some way even
with an ugly hack before the end of this cycle" would be.

Will take a look but not today.

Thanks.