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>
This commit is contained in:
parent
8073d75bbf
commit
6b5b6e422e
14
serve.c
14
serve.c
@ -8,6 +8,8 @@
|
|||||||
#include "serve.h"
|
#include "serve.h"
|
||||||
#include "upload-pack.h"
|
#include "upload-pack.h"
|
||||||
|
|
||||||
|
static int advertise_sid;
|
||||||
|
|
||||||
static int always_advertise(struct repository *r,
|
static int always_advertise(struct repository *r,
|
||||||
struct strbuf *value)
|
struct strbuf *value)
|
||||||
{
|
{
|
||||||
@ -30,6 +32,15 @@ static int object_format_advertise(struct repository *r,
|
|||||||
return 1;
|
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 {
|
struct protocol_capability {
|
||||||
/*
|
/*
|
||||||
* The name of the capability. The server uses this name when
|
* 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 },
|
{ "fetch", upload_pack_advertise, upload_pack_v2 },
|
||||||
{ "server-option", always_advertise, NULL },
|
{ "server-option", always_advertise, NULL },
|
||||||
{ "object-format", object_format_advertise, NULL },
|
{ "object-format", object_format_advertise, NULL },
|
||||||
|
{ "session-id", session_id_advertise, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void advertise_capabilities(void)
|
static void advertise_capabilities(void)
|
||||||
@ -261,6 +273,8 @@ static int process_request(void)
|
|||||||
/* Main serve loop for protocol version 2 */
|
/* Main serve loop for protocol version 2 */
|
||||||
void serve(struct serve_options *options)
|
void serve(struct serve_options *options)
|
||||||
{
|
{
|
||||||
|
git_config_get_bool("transfer.advertisesid", &advertise_sid);
|
||||||
|
|
||||||
if (options->advertise_capabilities || !options->stateless_rpc) {
|
if (options->advertise_capabilities || !options->stateless_rpc) {
|
||||||
/* serve by default supports v2 */
|
/* serve by default supports v2 */
|
||||||
packet_write_fmt(1, "version 2\n");
|
packet_write_fmt(1, "version 2\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user