serve: introduce the server-option capability
authorBrandon Williams <bmwill@google.com>
Mon, 23 Apr 2018 22:46:22 +0000 (15:46 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 24 Apr 2018 02:24:40 +0000 (11:24 +0900)
Introduce the "server-option" capability to protocol version 2. This
enables future clients the ability to send server specific options in
command requests when using protocol version 2.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/technical/protocol-v2.txt
serve.c
t/t5701-git-serve.sh
index 136179d7d8bcaf72686bed4aa5e3cd9376ef77bd..d7b6f38e0a7830f91cec19d566ed6d7868464bb7 100644 (file)
@@ -393,3 +393,13 @@ header.
                1 - pack data
                2 - progress messages
                3 - fatal error message just before stream aborts
+
+ server-option
+~~~~~~~~~~~~~~~
+
+If advertised, indicates that any number of server specific options can be
+included in a request.  This is done by sending each option as a
+"server-option=<option>" capability line in the capability-list section of
+a request.
+
+The provided options must not contain a NUL or LF character.
diff --git a/serve.c b/serve.c
index a5a7b2f7dd243c9dda3a29eda37aca8f96c3f0a5..bda085f09c8e10314c2c497dbca978fd9241e7b5 100644 (file)
--- a/serve.c
+++ b/serve.c
@@ -56,6 +56,7 @@ static struct protocol_capability capabilities[] = {
        { "agent", agent_advertise, NULL },
        { "ls-refs", always_advertise, ls_refs },
        { "fetch", upload_pack_advertise, upload_pack_v2 },
+       { "server-option", always_advertise, NULL },
 };
 
 static void advertise_capabilities(void)
index 72d7bc56280b13c68b930ea41690788ad87c9853..011a5796db5d98af3b2151563a8e9683b1139f1a 100755 (executable)
@@ -10,6 +10,7 @@ test_expect_success 'test capability advertisement' '
        agent=git/$(git version | cut -d" " -f3)
        ls-refs
        fetch=shallow
+       server-option
        0000
        EOF
 
@@ -173,4 +174,24 @@ test_expect_success 'symrefs parameter' '
        test_cmp actual expect
 '
 
+test_expect_success 'sending server-options' '
+       test-pkt-line pack >in <<-EOF &&
+       command=ls-refs
+       server-option=hello
+       server-option=world
+       0001
+       ref-prefix HEAD
+       0000
+       EOF
+
+       cat >expect <<-EOF &&
+       $(git rev-parse HEAD) HEAD
+       0000
+       EOF
+
+       git serve --stateless-rpc <in >out &&
+       test-pkt-line unpack <out >actual &&
+       test_cmp actual expect
+'
+
 test_done