Earlier this year, I sent 3 versions of a patch series with the goal of allowing a client C to clone from a server S while using the same promisor remote X that S already use. See: https://lore.kernel.org/git/20240418184043.2900955-1-christian.couder@xxxxxxxxx/ Junio suggested to instead implement that feature using: "a protocol extension that lets S tell C that S wants C to fetch missing objects from X (which means that if C knows about X in its ".git/config" then there is no need for end-user interaction at all), or a protocol extension that C tells S that C is willing to see objects available from X omitted when S does not have them (again, this could be done by looking at ".git/config" at C, but there may be security implications???)" This patch series implements that protocol extension called "promisor-remote" (that name is open to change or simplification) which allows S and C to agree on C using X directly or not. I have tried to implement it in a quite generic way that could allow S and C to share more information about promisor remotes and how to use them. For now C doesn't use the information it gets from S when cloning. That information is only used to decide if C is Ok to use the promisor remotes advertised by S. But this could change which could make it much simpler for clients than using the current way of passing information about X with the `-c` option of `git clone` many times on the command line. Another improvement could be to not require GIT_NO_LAZY_FETCH=0 when S and C have agreed on using S. Christian Couder (4): version: refactor strbuf_sanitize() strbuf: refactor strbuf_trim_trailing_ch() Add 'promisor-remote' capability to protocol v2 promisor-remote: check advertised name or URL Documentation/config/promisor.txt | 18 ++ Documentation/gitprotocol-v2.txt | 37 +++++ connect.c | 7 + promisor-remote.c | 228 ++++++++++++++++++++++++++ promisor-remote.h | 26 ++- serve.c | 21 +++ strbuf.c | 16 ++ strbuf.h | 10 ++ t/t5555-http-smart-common.sh | 1 + t/t5701-git-serve.sh | 1 + t/t5710-promisor-remote-capability.sh | 192 ++++++++++++++++++++++ trace2/tr2_cfg.c | 10 +- upload-pack.c | 3 + version.c | 9 +- 14 files changed, 563 insertions(+), 16 deletions(-) create mode 100755 t/t5710-promisor-remote-capability.sh -- 2.46.0.4.gbcb884ee16