Skip to content

Commit d6344f1

Browse files
committed
Merge branch 'cc/lop-remote' into jch
* 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 682bd51 + f41b399 commit d6344f1

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
@@ -798,6 +798,60 @@ retrieving the header from a bundle at the indicated URI, and thus
798798
save themselves and the server(s) the request(s) needed to inspect the
799799
headers of that bundle or bundles.
800800
801+
promisor-remote=<pr-infos>
802+
~~~~~~~~~~~~~~~~~~~~~~~~~~
803+
804+
The server may advertise some promisor remotes it is using or knows
805+
about to a client which may want to use them as its promisor remotes,
806+
instead of this repository. In this case <pr-infos> should be of the
807+
form:
808+
809+
pr-infos = pr-info | pr-infos ";" pr-info
810+
811+
pr-info = "name=" pr-name | "name=" pr-name "," "url=" pr-url
812+
813+
where `pr-name` is the urlencoded name of a promisor remote, and
814+
`pr-url` the urlencoded URL of that promisor remote.
815+
816+
In this case, if the client decides to use one or more promisor
817+
remotes the server advertised, it can reply with
818+
"promisor-remote=<pr-names>" where <pr-names> should be of the form:
819+
820+
pr-names = pr-name | pr-names ";" pr-name
821+
822+
where `pr-name` is the urlencoded name of a promisor remote the server
823+
advertised and the client accepts.
824+
825+
Note that, everywhere in this document, `pr-name` MUST be a valid
826+
remote name, and the ';' and ',' characters MUST be encoded if they
827+
appear in `pr-name` or `pr-url`.
828+
829+
If the server doesn't know any promisor remote that could be good for
830+
a client to use, or prefers a client not to use any promisor remote it
831+
uses or knows about, it shouldn't advertise the "promisor-remote"
832+
capability at all.
833+
834+
In this case, or if the client doesn't want to use any promisor remote
835+
the server advertised, the client shouldn't advertise the
836+
"promisor-remote" capability at all in its reply.
837+
838+
The "promisor.advertise" and "promisor.acceptFromServer" configuration
839+
options can be used on the server and client side respectively to
840+
control what they advertise or accept respectively. See the
841+
documentation of these configuration options for more information.
842+
843+
Note that in the future it would be nice if the "promisor-remote"
844+
protocol capability could be used by the server, when responding to
845+
`git fetch` or `git clone`, to advertise better-connected remotes that
846+
the client can use as promisor remotes, instead of this repository, so
847+
that the client can lazily fetch objects from these other
848+
better-connected remotes. This would require the server to omit in its
849+
response the objects available on the better-connected remotes that
850+
the client has accepted. This hasn't been implemented yet though. So
851+
for now this "promisor-remote" capability is useful only when the
852+
server advertises some promisor remotes it already uses to borrow
853+
objects from.
854+
801855
GIT
802856
---
803857
Part of the linkgit:git[1] suite

0 commit comments

Comments
 (0)