From: Pablo Sabater <pabloosabaterr@gmail.com>
To: git@vger.kernel.org
Cc: chandrapratap3519@gmail.com, karthik.188@gmail.com,
gitster@pobox.com, Pablo Sabater <pabloosabaterr@gmail.com>
Subject: [PATCH GSoC v2 3/6] protocol-caps: add type support to object-info
Date: Fri, 31 Jul 2026 21:49:36 +0200 [thread overview]
Message-ID: <20260731-objecttype-support-v2-3-af577461ed57@gmail.com> (raw)
In-Reply-To: <20260731-objecttype-support-v2-0-af577461ed57@gmail.com>
Teach the server-side object-info handler to accept type as a requested
field. When the client includes type in its object-info request, the
server returns the requested object type.
While touching send_info(), wrap an over-long line and fix the bit field
style of requested_info.size.
Mentored-by: Karthik Nayak <karthik.188@gmail.com>
Mentored-by: Chandra Pratap <chandrapratap3519@gmail.com>
Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
---
protocol-caps.c | 21 ++++++++++++++++++---
t/t5701-git-serve.sh | 27 +++++++++++++++++++++++++++
2 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/protocol-caps.c b/protocol-caps.c
index 02261be14d..27e0f85b10 100644
--- a/protocol-caps.c
+++ b/protocol-caps.c
@@ -11,7 +11,8 @@
#include "strbuf.h"
struct requested_info {
- unsigned size : 1;
+ unsigned size:1;
+ unsigned type:1;
};
/*
@@ -73,15 +74,20 @@ static void send_info(struct repository *r, struct packet_writer *writer,
if (info->size)
packet_writer_write(writer, "size");
+ if (info->type)
+ packet_writer_write(writer, "type");
+
for_each_string_list_item (item, oid_str_list) {
const char *oid_str = item->string;
+ enum object_type object_type;
struct object_id oid;
size_t object_size;
if (get_oid_hex_algop(oid_str, &oid, r->hash_algo) < 0) {
packet_writer_error(
writer,
- "object-info: protocol error, expected to get oid, not '%s'",
+ "object-info: protocol error, expected to get "
+ "oid, not '%s'",
oid_str);
continue;
}
@@ -93,7 +99,8 @@ static void send_info(struct repository *r, struct packet_writer *writer,
* If an object is not recognized by the server append SP to
* the response.
*/
- if (get_object_info(r->objects, &oid, &object_size) <= OBJ_NONE) {
+ object_type = get_object_info(r->objects, &oid, &object_size);
+ if (object_type <= OBJ_NONE) {
strbuf_addstr(&send_buffer, " ");
goto write;
}
@@ -103,6 +110,9 @@ static void send_info(struct repository *r, struct packet_writer *writer,
(uintmax_t)object_size);
}
+ if (info->type)
+ strbuf_addf(&send_buffer, " %s", type_name(object_type));
+
write:
packet_writer_write(writer, "%s", send_buffer.buf);
strbuf_reset(&send_buffer);
@@ -124,6 +134,11 @@ int cap_object_info(struct repository *r, struct packet_reader *request)
continue;
}
+ if (!strcmp("type", request->line)) {
+ info.type = 1;
+ continue;
+ }
+
if (parse_oid(request->line, &oid_str_list))
continue;
diff --git a/t/t5701-git-serve.sh b/t/t5701-git-serve.sh
index b4d6beef11..d7445571b1 100755
--- a/t/t5701-git-serve.sh
+++ b/t/t5701-git-serve.sh
@@ -366,6 +366,33 @@ test_expect_success 'basics of object-info' '
test_cmp expect actual
'
+test_expect_success 'object-info supports type' '
+ test_config transfer.advertiseObjectInfo true &&
+
+ test-tool pkt-line pack >in <<-EOF &&
+ command=object-info
+ object-format=$(test_oid algo)
+ 0001
+ size
+ type
+ oid $(git rev-parse two:two.t)
+ oid $(git rev-parse two:two.t)
+ 0000
+ EOF
+
+ cat >expect <<-EOF &&
+ size
+ type
+ $(git rev-parse two:two.t) $(test_file_size two.t) blob
+ $(git rev-parse two:two.t) $(test_file_size two.t) blob
+ 0000
+ EOF
+
+ test-tool serve-v2 --stateless-rpc <in >out &&
+ test-tool pkt-line unpack <out >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'bare OID request' '
test_config transfer.advertiseObjectInfo true &&
--
2.54.0
next prev parent reply other threads:[~2026-07-31 19:50 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-25 11:55 [PATCH GSoC 0/5] cat-file: extend remote-object-info to support %(objecttype) Pablo Sabater
2026-07-25 11:55 ` [PATCH GSoC 1/5] protocol-caps: add type support to object-info Pablo Sabater
2026-07-29 9:53 ` Chandra Pratap
2026-07-29 11:18 ` Pablo Sabater
2026-07-29 15:40 ` Junio C Hamano
2026-07-29 22:39 ` Karthik Nayak
2026-07-25 11:55 ` [PATCH GSoC 2/5] fetch-object-info: parse type from server response Pablo Sabater
2026-07-29 9:57 ` Chandra Pratap
2026-07-29 12:05 ` Pablo Sabater
2026-07-29 17:06 ` Chandra Pratap
2026-07-29 22:47 ` Karthik Nayak
2026-07-29 22:53 ` Karthik Nayak
2026-07-25 11:55 ` [PATCH GSoC 3/5] fetch-object-info: request all supported options dynamically Pablo Sabater
2026-07-29 9:57 ` Chandra Pratap
2026-07-29 12:07 ` Pablo Sabater
2026-07-25 11:55 ` [PATCH GSoC 4/5] serve: advertise type capability Pablo Sabater
2026-07-29 9:58 ` Chandra Pratap
2026-07-29 12:15 ` Pablo Sabater
2026-07-25 11:55 ` [PATCH GSoC 5/5] cat-file: unify default format Pablo Sabater
2026-07-29 9:59 ` Chandra Pratap
2026-07-29 12:23 ` Pablo Sabater
2026-07-29 9:52 ` [PATCH GSoC 0/5] cat-file: extend remote-object-info to support %(objecttype) Chandra Pratap
2026-07-29 12:34 ` Pablo Sabater
2026-07-31 19:49 ` [PATCH GSoC v2 0/6] " Pablo Sabater
2026-07-31 19:49 ` [PATCH GSoC v2 1/6] fetch-object-info: request all supported options dynamically Pablo Sabater
2026-07-31 19:49 ` [PATCH GSoC v2 2/6] t5701: use the test_file_size() helper Pablo Sabater
2026-07-31 19:49 ` Pablo Sabater [this message]
2026-07-31 19:49 ` [PATCH GSoC v2 4/6] fetch-object-info: parse type from server response Pablo Sabater
2026-07-31 19:49 ` [PATCH GSoC v2 5/6] serve: advertise type capability Pablo Sabater
2026-07-31 19:49 ` [PATCH GSoC v2 6/6] cat-file: unify default format Pablo Sabater
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260731-objecttype-support-v2-3-af577461ed57@gmail.com \
--to=pabloosabaterr@gmail.com \
--cc=chandrapratap3519@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=karthik.188@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox