]> git.ipfire.org Git - thirdparty/git.git/commitdiff
receive-pack: log received client session ID
authorJosh Steadmon <steadmon@google.com>
Wed, 11 Nov 2020 23:29:34 +0000 (15:29 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 12 Nov 2020 02:26:53 +0000 (18:26 -0800)
When receive-pack receives a session-id capability from the client, log
the received session ID via a trace2 data event.

Signed-off-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/receive-pack.c
t/t5705-session-id-in-capabilities.sh

index 6ed498b6c73e42f29ec5029d30f37b1d66997af0..deb5f859a9c85d4c829298fa84ec4f0228ae7a8a 100644 (file)
@@ -2039,6 +2039,7 @@ static struct command *read_head_info(struct packet_reader *reader,
                if (linelen < reader->pktlen) {
                        const char *feature_list = reader->line + linelen + 1;
                        const char *hash = NULL;
+                       const char *client_sid;
                        int len = 0;
                        if (parse_feature_request(feature_list, "report-status"))
                                report_status = 1;
@@ -2061,6 +2062,12 @@ static struct command *read_head_info(struct packet_reader *reader,
                        }
                        if (xstrncmpz(the_hash_algo->name, hash, len))
                                die("error: unsupported object format '%s'", hash);
+                       client_sid = parse_feature_value(feature_list, "session-id", &len, NULL);
+                       if (client_sid) {
+                               char *sid = xstrndup(client_sid, len);
+                               trace2_data_string("transfer", NULL, "client-sid", client_sid);
+                               free(sid);
+                       }
                }
 
                if (!strcmp(reader->line, "push-cert")) {
index afa2159657a75b7aee48fc54ad42982024de3c23..f1d189d5bcc443c3abf8a62939b04ff3006ccf1a 100755 (executable)
@@ -28,13 +28,17 @@ do
        '
 
        test_expect_success "session IDs not advertised by default (push v${PROTO})" '
-               test_when_finished "rm -rf local tr2-client-events" &&
+               test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
+               test_when_finished "git -C local push --delete origin new-branch" &&
                cp -r "$LOCAL_PRISTINE" local &&
                git -C local pull --no-rebase origin &&
                GIT_TRACE2_EVENT_NESTING=5 \
                GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
-               git -c protocol.version=$PROTO -C local push origin &&
-               test -z "$(grep \"key\":\"server-sid\" tr2-client-events)"
+               git -c protocol.version=$PROTO -C local push \
+                       --receive-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-receive-pack" \
+                       origin HEAD:new-branch &&
+               test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" &&
+               test -z "$(grep \"key\":\"client-sid\" tr2-server-events)"
        '
 done
 
@@ -57,13 +61,17 @@ do
        '
 
        test_expect_success "session IDs advertised (push v${PROTO})" '
-               test_when_finished "rm -rf local tr2-client-events" &&
+               test_when_finished "rm -rf local tr2-client-events tr2-server-events" &&
+               test_when_finished "git -C local push --delete origin new-branch" &&
                cp -r "$LOCAL_PRISTINE" local &&
                git -C local pull --no-rebase origin &&
                GIT_TRACE2_EVENT_NESTING=5 \
                GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
-               git -c protocol.version=$PROTO -C local push origin &&
-               grep \"key\":\"server-sid\" tr2-client-events
+               git -c protocol.version=$PROTO -C local push \
+                       --receive-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-receive-pack" \
+                       origin HEAD:new-branch &&
+               grep \"key\":\"server-sid\" tr2-client-events &&
+               grep \"key\":\"client-sid\" tr2-server-events
        '
 done