path: root/Documentation/technical/pack-protocol.txt
diff options
authorJunio C Hamano <>2017-05-23 04:46:07 (GMT)
committerJunio C Hamano <>2017-05-23 04:46:07 (GMT)
commit3c980083bc404cb62fb87c76d331c48a44c5f50d (patch)
tree7f2fe624f1737885de03efc891363401341bcf39 /Documentation/technical/pack-protocol.txt
parente4b6ccdbffc6b4aa17af511632e7228f900a673e (diff)
parentcbaf82cc6b734244a9190c3341ca5f08f8d5acc4 (diff)
Merge branch 'jt/push-options-doc'
The receive-pack program now makes sure that the push certificate records the same set of push options used for pushing. * jt/push-options-doc: receive-pack: verify push options in cert docs: correct receive.advertisePushOptions default
Diffstat (limited to 'Documentation/technical/pack-protocol.txt')
1 files changed, 26 insertions, 6 deletions
diff --git a/Documentation/technical/pack-protocol.txt b/Documentation/technical/pack-protocol.txt
index 5b0ba3e..a349171 100644
--- a/Documentation/technical/pack-protocol.txt
+++ b/Documentation/technical/pack-protocol.txt
@@ -473,13 +473,10 @@ that it wants to update, it sends a line listing the obj-id currently on
the server, the obj-id the client would like to update it to and the name
of the reference.
-This list is followed by a flush-pkt. Then the push options are transmitted
-one per packet followed by another flush-pkt. After that the packfile that
-should contain all the objects that the server will need to complete the new
-references will be sent.
+This list is followed by a flush-pkt.
- update-request = *shallow ( command-list | push-cert ) [packfile]
+ update-requests = *shallow ( command-list | push-cert )
shallow = PKT-LINE("shallow" SP obj-id)
@@ -500,12 +497,35 @@ references will be sent.
PKT-LINE("pusher" SP ident LF)
PKT-LINE("pushee" SP url LF)
PKT-LINE("nonce" SP nonce LF)
+ *PKT-LINE("push-option" SP push-option LF)
*PKT-LINE(command LF)
*PKT-LINE(gpg-signature-lines LF)
PKT-LINE("push-cert-end" LF)
- packfile = "PACK" 28*(OCTET)
+ push-option = 1*( VCHAR | SP )
+If the server has advertised the 'push-options' capability and the client has
+specified 'push-options' as part of the capability list above, the client then
+sends its push options followed by a flush-pkt.
+ push-options = *PKT-LINE(push-option) flush-pkt
+For backwards compatibility with older Git servers, if the client sends a push
+cert and push options, it MUST send its push options both embedded within the
+push cert and after the push cert. (Note that the push options within the cert
+are prefixed, but the push options after the cert are not.) Both these lists
+MUST be the same, modulo the prefix.
+After that the packfile that
+should contain all the objects that the server will need to complete the new
+references will be sent.
+ packfile = "PACK" 28*(OCTET)
If the receiving end does not support delete-refs, the sending end MUST