summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Steadmon <steadmon@google.com>2020-11-11 23:29:29 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-11-12 02:26:53 (GMT)
commit6b5b6e422ee3d84feccc1b09c18188fedaaed761 (patch)
treee91a6165b60ead887d5ca19822d164191e3e2cb5
parent8073d75bbf268da6da36f06ab2d1f0d9018bd74d (diff)
downloadgit-6b5b6e422ee3d84feccc1b09c18188fedaaed761.zip
git-6b5b6e422ee3d84feccc1b09c18188fedaaed761.tar.gz
git-6b5b6e422ee3d84feccc1b09c18188fedaaed761.tar.bz2
serve: advertise session ID in v2 capabilities
When transfer.advertiseSID is true, advertise the server's session ID for all protocol v2 connections via the new session-id capability. Signed-off-by: Josh Steadmon <steadmon@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--serve.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/serve.c b/serve.c
index f634120..8c0bb84 100644
--- a/serve.c
+++ b/serve.c
@@ -8,6 +8,8 @@
#include "serve.h"
#include "upload-pack.h"
+static int advertise_sid;
+
static int always_advertise(struct repository *r,
struct strbuf *value)
{
@@ -30,6 +32,15 @@ static int object_format_advertise(struct repository *r,
return 1;
}
+static int session_id_advertise(struct repository *r, struct strbuf *value)
+{
+ if (!advertise_sid)
+ return 0;
+ if (value)
+ strbuf_addstr(value, trace2_session_id());
+ return 1;
+}
+
struct protocol_capability {
/*
* The name of the capability. The server uses this name when
@@ -66,6 +77,7 @@ static struct protocol_capability capabilities[] = {
{ "fetch", upload_pack_advertise, upload_pack_v2 },
{ "server-option", always_advertise, NULL },
{ "object-format", object_format_advertise, NULL },
+ { "session-id", session_id_advertise, NULL },
};
static void advertise_capabilities(void)
@@ -261,6 +273,8 @@ static int process_request(void)
/* Main serve loop for protocol version 2 */
void serve(struct serve_options *options)
{
+ git_config_get_bool("transfer.advertisesid", &advertise_sid);
+
if (options->advertise_capabilities || !options->stateless_rpc) {
/* serve by default supports v2 */
packet_write_fmt(1, "version 2\n");