Skip to content

Commit 177f628

Browse files
committed
Merge branch 'cc/lop-remote' into seen
* cc/lop-remote: doc: add technical design doc for large object promisors promisor-remote: check advertised name or URL Add 'promisor-remote' capability to protocol v2 version: make redact_non_printables() non-static
2 parents 327919b + 2c0cab5 commit 177f628

File tree

12 files changed

+1360
-6
lines changed

12 files changed

+1360
-6
lines changed

Documentation/config/promisor.adoc

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
11
promisor.quiet::
22
If set to "true" assume `--quiet` when fetching additional
33
objects for a partial clone.
4+
5+
promisor.advertise::
6+
If set to "true", a server will use the "promisor-remote"
7+
capability, see linkgit:gitprotocol-v2[5], to advertise the
8+
promisor remotes it is using, if it uses some. Default is
9+
"false", which means the "promisor-remote" capability is not
10+
advertised.
11+
12+
promisor.acceptFromServer::
13+
If set to "all", a client will accept all the promisor remotes
14+
a server might advertise using the "promisor-remote"
15+
capability. If set to "knownName" the client will accept
16+
promisor remotes which are already configured on the client
17+
and have the same name as those advertised by the client. This
18+
is not very secure, but could be used in a corporate setup
19+
where servers and clients are trusted to not switch name and
20+
URLs. If set to "knownUrl", the client will accept promisor
21+
remotes which have both the same name and the same URL
22+
configured on the client as the name and URL advertised by the
23+
server. This is more secure than "all" or "knownUrl", so it
24+
should be used if possible instead of those options. Default
25+
is "none", which means no promisor remote advertised by a
26+
server will be accepted. By accepting a promisor remote, the
27+
client agrees that the server might omit objects that are
28+
lazily fetchable from this promisor remote from its responses
29+
to "fetch" and "clone" requests from the client. See
30+
linkgit:gitprotocol-v2[5].

Documentation/gitprotocol-v2.adoc

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,60 @@ retrieving the header from a bundle at the indicated URI, and thus
784784
save themselves and the server(s) the request(s) needed to inspect the
785785
headers of that bundle or bundles.
786786
787+
promisor-remote=<pr-infos>
788+
~~~~~~~~~~~~~~~~~~~~~~~~~~
789+
790+
The server may advertise some promisor remotes it is using or knows
791+
about to a client which may want to use them as its promisor remotes,
792+
instead of this repository. In this case <pr-infos> should be of the
793+
form:
794+
795+
pr-infos = pr-info | pr-infos ";" pr-info
796+
797+
pr-info = "name=" pr-name | "name=" pr-name "," "url=" pr-url
798+
799+
where `pr-name` is the urlencoded name of a promisor remote, and
800+
`pr-url` the urlencoded URL of that promisor remote.
801+
802+
In this case, if the client decides to use one or more promisor
803+
remotes the server advertised, it can reply with
804+
"promisor-remote=<pr-names>" where <pr-names> should be of the form:
805+
806+
pr-names = pr-name | pr-names ";" pr-name
807+
808+
where `pr-name` is the urlencoded name of a promisor remote the server
809+
advertised and the client accepts.
810+
811+
Note that, everywhere in this document, `pr-name` MUST be a valid
812+
remote name, and the ';' and ',' characters MUST be encoded if they
813+
appear in `pr-name` or `pr-url`.
814+
815+
If the server doesn't know any promisor remote that could be good for
816+
a client to use, or prefers a client not to use any promisor remote it
817+
uses or knows about, it shouldn't advertise the "promisor-remote"
818+
capability at all.
819+
820+
In this case, or if the client doesn't want to use any promisor remote
821+
the server advertised, the client shouldn't advertise the
822+
"promisor-remote" capability at all in its reply.
823+
824+
The "promisor.advertise" and "promisor.acceptFromServer" configuration
825+
options can be used on the server and client side respectively to
826+
control what they advertise or accept respectively. See the
827+
documentation of these configuration options for more information.
828+
829+
Note that in the future it would be nice if the "promisor-remote"
830+
protocol capability could be used by the server, when responding to
831+
`git fetch` or `git clone`, to advertise better-connected remotes that
832+
the client can use as promisor remotes, instead of this repository, so
833+
that the client can lazily fetch objects from these other
834+
better-connected remotes. This would require the server to omit in its
835+
response the objects available on the better-connected remotes that
836+
the client has accepted. This hasn't been implemented yet though. So
837+
for now this "promisor-remote" capability is useful only when the
838+
server advertises some promisor remotes it already uses to borrow
839+
objects from.
840+
787841
GIT
788842
---
789843
Part of the linkgit:git[1] suite

0 commit comments

Comments
 (0)