Skip to content

Commit 2c6fd30

Browse files
committed
Merge branch 'cc/lop-remote'
Large-object promisor protocol extension. * 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
2 parents 6024f32 + 5040f9f commit 2c6fd30

File tree

10 files changed

+1366
-1
lines changed

10 files changed

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

0 commit comments

Comments
 (0)