]> git.ipfire.org Git - thirdparty/git.git/commitdiff
serve: provide "receive" function for session-id capability
authorJeff King <peff@peff.net>
Tue, 14 Sep 2021 23:51:30 +0000 (19:51 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 15 Sep 2021 00:12:05 +0000 (17:12 -0700)
Rather than pulling the session-id string from the list of collected
capabilities, we can handle it as soon as we receive it. This gets us
closer to dropping the collected list entirely.

The behavior should be the same, with one exception. Previously if the
client sent us multiple session-id lines, we'd report only the first.
Now we'll pass each one along to trace2. This shouldn't matter in
practice, since clients shouldn't do that (and if they do, it's probably
sensible to log them all).

As this removes the last caller of the static has_capability(), we can
remove it, as well (and in fact we must to avoid -Wunused-function
complaining).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
serve.c

diff --git a/serve.c b/serve.c
index f6ea2953eb12f5b68dfcdbee24c6080e97f0c802..6bbf54cbbee7e717849b743b1d41babb9e098cf6 100644 (file)
--- a/serve.c
+++ b/serve.c
@@ -57,6 +57,14 @@ static int session_id_advertise(struct repository *r, struct strbuf *value)
        return 1;
 }
 
+static void session_id_receive(struct repository *r,
+                              const char *client_sid)
+{
+       if (!client_sid)
+               client_sid = "";
+       trace2_data_string("transfer", NULL, "client-sid", client_sid);
+}
+
 struct protocol_capability {
        /*
         * The name of the capability.  The server uses this name when
@@ -121,6 +129,7 @@ static struct protocol_capability capabilities[] = {
        {
                .name = "session-id",
                .advertise = session_id_advertise,
+               .receive = session_id_receive,
        },
        {
                .name = "object-info",
@@ -221,26 +230,6 @@ static int parse_command(const char *key, struct protocol_capability **command)
        return 0;
 }
 
-static int has_capability(const struct strvec *keys, const char *capability,
-                         const char **value)
-{
-       int i;
-       for (i = 0; i < keys->nr; i++) {
-               const char *out;
-               if (skip_prefix(keys->v[i], capability, &out) &&
-                   (!*out || *out == '=')) {
-                       if (value) {
-                               if (*out == '=')
-                                       out++;
-                               *value = out;
-                       }
-                       return 1;
-               }
-       }
-
-       return 0;
-}
-
 enum request_state {
        PROCESS_REQUEST_KEYS,
        PROCESS_REQUEST_DONE,
@@ -252,7 +241,6 @@ static int process_request(void)
        struct packet_reader reader;
        struct strvec keys = STRVEC_INIT;
        struct protocol_capability *command = NULL;
-       const char *client_sid;
 
        packet_reader_init(&reader, 0, NULL, 0,
                           PACKET_READ_CHOMP_NEWLINE |
@@ -319,9 +307,6 @@ static int process_request(void)
                    the_repository->hash_algo->name,
                    hash_algos[client_hash_algo].name);
 
-       if (has_capability(&keys, "session-id", &client_sid))
-               trace2_data_string("transfer", NULL, "client-sid", client_sid);
-
        command->command(the_repository, &reader);
 
        strvec_clear(&keys);