From: Pablo Sabater <pabloosabaterr@gmail.com>
To: git@vger.kernel.org
Cc: pabloosabaterr@gmail.com, chandrapratap3519@gmail.com,
chriscool@tuxfamily.org, eric.peijian@gmail.com,
gitster@pobox.com, jltobler@gmail.com, karthik.188@gmail.com,
peff@peff.net, toon@iotcl.com, Calvin Wan <calvinwan@google.com>,
Jonathan Tan <jonathantanmy@google.com>
Subject: [PATCH GSoC v15 10/13] transport: add client support for object-info
Date: Wed, 1 Jul 2026 14:18:44 +0200 [thread overview]
Message-ID: <20260701-ps-eric-work-rebase-v15-10-c88a43b63917@gmail.com> (raw)
In-Reply-To: <20260701-ps-eric-work-rebase-v15-0-c88a43b63917@gmail.com>
From: Calvin Wan <calvinwan@google.com>
Sometimes, it is beneficial to retrieve information about an object
without downloading it entirely. The server-side logic for this
functionality was implemented in commit "a2ba162cda (object-info:
support for retrieving object info, 2021-04-20)." And the wire
format is documented at
https://git-scm.com/docs/protocol-v2#_object_info.
Introduce client-side support for the object-info capability.
Add its own function for object-info separate from existing fetch
infrastructure.
Currently, the client supports requesting a list of object IDs with
the `size` feature from a v2 server. If the server does not advertise
this feature (i.e., transfer.advertiseobjectinfo is set to false),
the client returns an error and exit.
Note that:
1. the entire request is written into `req_buf` before being sent to the
remote. This approach follows the pattern used in the
`send_fetch_request()` logic within 'fetch-pack.c'. Streaming the
request is not addressed in this patch.
2. When the server does not recognize an OID, following the v2 protocol,
the server returns "<OID> SP", when this happens,
`fetch_object_info()` sets the corresponding size pointer to NULL so
that callers can detect and handle it.
Helped-by: Jonathan Tan <jonathantanmy@google.com>
Helped-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Calvin Wan <calvinwan@google.com>
Signed-off-by: Eric Ju <eric.peijian@gmail.com>
Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
---
Makefile | 1 +
fetch-object-info.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++
fetch-object-info.h | 22 ++++++++++++
fetch-pack.h | 1 +
meson.build | 1 +
transport-helper.c | 13 +++++--
transport-internal.h | 8 +++++
transport.c | 46 +++++++++++++++++++++++++
transport.h | 10 ++++++
9 files changed, 195 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 1cec251f43..ec4df39a6b 100644
--- a/Makefile
+++ b/Makefile
@@ -1159,6 +1159,7 @@ LIB_OBJS += ewah/ewah_rlw.o
LIB_OBJS += exec-cmd.o
LIB_OBJS += fetch-negotiator.o
LIB_OBJS += fetch-pack.o
+LIB_OBJS += fetch-object-info.o
LIB_OBJS += fmt-merge-msg.o
LIB_OBJS += fsck.o
LIB_OBJS += fsmonitor.o
diff --git a/fetch-object-info.c b/fetch-object-info.c
new file mode 100644
index 0000000000..03cfb70338
--- /dev/null
+++ b/fetch-object-info.c
@@ -0,0 +1,95 @@
+#include "git-compat-util.h"
+#include "gettext.h"
+#include "hex.h"
+#include "pkt-line.h"
+#include "connect.h"
+#include "oid-array.h"
+#include "odb.h"
+#include "fetch-object-info.h"
+#include "string-list.h"
+
+/* Sends object-info command and its arguments into the request buffer. */
+static void send_object_info_request(const int fd_out, struct object_info_args *args)
+{
+ struct strbuf req_buf = STRBUF_INIT;
+
+ write_command_and_capabilities(&req_buf, "object-info", args->server_options);
+
+ if (unsorted_string_list_has_string(args->object_info_options, "size"))
+ packet_buf_write(&req_buf, "size");
+ else
+ BUG("only size should be in object_info_options");
+
+ if (args->oids)
+ for (size_t i = 0; i < args->oids->nr; i++)
+ packet_buf_write(&req_buf, "oid %s", oid_to_hex(&args->oids->oid[i]));
+
+ packet_buf_flush(&req_buf);
+ if (write_in_full(fd_out, req_buf.buf, req_buf.len) < 0)
+ die_errno(_("unable to write request to remote"));
+
+ strbuf_release(&req_buf);
+}
+
+int fetch_object_info(const enum protocol_version version, struct object_info_args *args,
+ struct packet_reader *reader, struct object_info *object_info_data,
+ const int stateless_rpc, const int fd_out)
+{
+ int size_index = -1;
+
+ switch (version) {
+ case protocol_v2:
+ if (!server_supports_v2("object-info"))
+ die(_("object-info capability is not enabled on the server"));
+ send_object_info_request(fd_out, args);
+ break;
+ case protocol_v1:
+ case protocol_v0:
+ die(_("unsupported protocol version. expected v2"));
+ case protocol_unknown_version:
+ BUG("unknown protocol version");
+ }
+
+ for (size_t i = 0; i < args->object_info_options->nr; i++) {
+ if (packet_reader_read(reader) != PACKET_READ_NORMAL) {
+ check_stateless_delimiter(stateless_rpc, reader,
+ "stateless delimiter expected");
+ return -1;
+ }
+
+ if (!string_list_has_string(args->object_info_options, reader->line))
+ return -1;
+
+ if (!strcmp(reader->line, "size")) {
+ size_index = i;
+ for (size_t j = 0; j < args->oids->nr; j++)
+ object_info_data[j].sizep = xcalloc(1, sizeof(*object_info_data[j].sizep));
+ } else {
+ BUG("only size is supported");
+ }
+ }
+
+ for (size_t i = 0; packet_reader_read(reader) == PACKET_READ_NORMAL && i < args->oids->nr; i++) {
+ struct string_list object_info_values = STRING_LIST_INIT_DUP;
+
+ string_list_split(&object_info_values, reader->line, " ", -1);
+ if (size_index >= 0) {
+ if (!strcmp(object_info_values.items[1 + size_index].string, "")) {
+ FREE_AND_NULL(object_info_data[i].sizep);
+ string_list_clear(&object_info_values, 0);
+ continue;
+ }
+
+ if (strtoumax_szt(object_info_values.items[1 + size_index].string,
+ 10, object_info_data[i].sizep))
+ die("object-info: ref %s has invalid size %s",
+ object_info_values.items[0].string,
+ object_info_values.items[1 + size_index].string);
+ }
+
+ string_list_clear(&object_info_values, 0);
+ }
+ check_stateless_delimiter(stateless_rpc, reader, "stateless delimiter expected");
+
+ return 0;
+}
diff --git a/fetch-object-info.h b/fetch-object-info.h
new file mode 100644
index 0000000000..d35284bd6b
--- /dev/null
+++ b/fetch-object-info.h
@@ -0,0 +1,22 @@
+#ifndef FETCH_OBJECT_INFO_H
+#define FETCH_OBJECT_INFO_H
+
+#include "pkt-line.h"
+#include "protocol.h"
+#include "odb.h"
+
+struct object_info_args {
+ struct string_list *object_info_options;
+ const struct string_list *server_options;
+ struct oid_array *oids;
+};
+
+/*
+ * Sends git-cat-file object-info command into the request buf and read the
+ * results from packets.
+ */
+int fetch_object_info(enum protocol_version version, struct object_info_args *args,
+ struct packet_reader *reader, struct object_info *object_info_data,
+ int stateless_rpc, int fd_out);
+
+#endif /* FETCH_OBJECT_INFO_H */
diff --git a/fetch-pack.h b/fetch-pack.h
index 6d0dec7f41..0fba340a84 100644
--- a/fetch-pack.h
+++ b/fetch-pack.h
@@ -16,6 +16,7 @@ struct fetch_pack_args {
const struct string_list *deepen_not;
struct list_objects_filter_options filter_options;
const struct string_list *server_options;
+ struct object_info *object_info_data;
/*
* If not NULL, during packfile negotiation, fetch-pack will send "have"
diff --git a/meson.build b/meson.build
index 3247697f74..145c6882eb 100644
--- a/meson.build
+++ b/meson.build
@@ -347,6 +347,7 @@ libgit_sources = [
'exec-cmd.c',
'fetch-negotiator.c',
'fetch-pack.c',
+ 'fetch-object-info.c',
'fmt-merge-msg.c',
'fsck.c',
'fsmonitor.c',
diff --git a/transport-helper.c b/transport-helper.c
index f195070788..f97e6d7b29 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -727,8 +727,7 @@ static int fetch_refs(struct transport *transport,
/*
* If we reach here, then the server, the client, and/or the transport
- * helper does not support protocol v2. --negotiate-only requires
- * protocol v2.
+ * helper does not support protocol v2. --negotiate-only.
*/
if (data->transport_options.acked_commits) {
warning(_("--negotiate-only requires protocol v2"));
@@ -784,6 +783,15 @@ static int fetch_refs(struct transport *transport,
return -1;
}
+static int fetch_object_info_helper(struct transport *transport)
+{
+ get_helper(transport);
+ if (process_connect(transport, 0))
+ return transport->vtable->fetch_object_info(transport);
+
+ die(_("object-info requires protocol v2"));
+}
+
struct push_update_ref_state {
struct ref *hint;
struct ref_push_report *report;
@@ -1330,6 +1338,7 @@ static struct transport_vtable vtable = {
.get_refs_list = get_refs_list,
.get_bundle_uri = get_bundle_uri,
.fetch_refs = fetch_refs,
+ .fetch_object_info = fetch_object_info_helper,
.push_refs = push_refs,
.connect = connect_helper,
.disconnect = release_helper
diff --git a/transport-internal.h b/transport-internal.h
index 051f3ab0dc..60db0bedcd 100644
--- a/transport-internal.h
+++ b/transport-internal.h
@@ -45,6 +45,14 @@ struct transport_vtable {
**/
int (*fetch_refs)(struct transport *transport, int refs_nr, struct ref **refs);
+ /*
+ * Fetch object info (only size currently) from remote without
+ * downloading the objects.
+ *
+ * Uses object-info capability of v2 protocol.
+ */
+ int (*fetch_object_info)(struct transport *transport);
+
/**
* Push the objects and refs. Send the necessary objects, and
* then, for any refs where peer_ref is set and
diff --git a/transport.c b/transport.c
index 0f5ec30247..602b1c5512 100644
--- a/transport.c
+++ b/transport.c
@@ -1,3 +1,4 @@
+#include "compat/posix.h"
#define USE_THE_REPOSITORY_VARIABLE
#include "git-compat-util.h"
@@ -9,6 +10,7 @@
#include "hook.h"
#include "pkt-line.h"
#include "fetch-pack.h"
+#include "fetch-object-info.h"
#include "remote.h"
#include "connect.h"
#include "send-pack.h"
@@ -432,6 +434,48 @@ static int get_bundle_uri(struct transport *transport)
transport->bundles, stateless_rpc);
}
+static int fetch_object_info_via_pack(struct transport *transport)
+{
+ int ret = 0;
+ struct git_transport_data *data = transport->data;
+ struct packet_reader reader;
+ struct object_info_args args = { 0 };
+
+ args.server_options = transport->server_options;
+ args.oids = transport->smart_options->object_info_oids;
+ args.object_info_options = transport->smart_options->object_info_options;
+ string_list_sort(args.object_info_options);
+
+ connect_setup(transport, 0);
+ packet_reader_init(&reader, data->fd[0], NULL, 0,
+ PACKET_READ_CHOMP_NEWLINE |
+ PACKET_READ_GENTLE_ON_EOF |
+ PACKET_READ_DIE_ON_ERR_PACKET);
+
+ data->version = discover_version(&reader);
+ transport->hash_algo = reader.hash_algo;
+
+ ret = fetch_object_info(data->version, &args, &reader,
+ data->options.object_info_data,
+ transport->stateless_rpc, data->fd[1]);
+
+ close(data->fd[0]);
+ if (data->fd[1] >= 0)
+ close(data->fd[1]);
+ if (finish_connect(data->conn))
+ ret = -1;
+ data->conn = NULL;
+
+ return ret;
+}
+
+int transport_fetch_object_info(struct transport *transport)
+{
+ if (!transport->vtable->fetch_object_info)
+ die(_("remote does not support object-info"));
+ return transport->vtable->fetch_object_info(transport);
+}
+
static int fetch_refs_via_pack(struct transport *transport,
int nr_heads, struct ref **to_fetch)
{
@@ -1004,6 +1048,7 @@ static struct transport_vtable taken_over_vtable = {
.get_refs_list = get_refs_via_connect,
.get_bundle_uri = get_bundle_uri,
.fetch_refs = fetch_refs_via_pack,
+ .fetch_object_info = fetch_object_info_via_pack,
.push_refs = git_transport_push,
.disconnect = disconnect_git
};
@@ -1169,6 +1214,7 @@ static struct transport_vtable builtin_smart_vtable = {
.get_refs_list = get_refs_via_connect,
.get_bundle_uri = get_bundle_uri,
.fetch_refs = fetch_refs_via_pack,
+ .fetch_object_info = fetch_object_info_via_pack,
.push_refs = git_transport_push,
.connect = connect_git,
.disconnect = disconnect_git
diff --git a/transport.h b/transport.h
index 7e5867cffa..9e85a4cd35 100644
--- a/transport.h
+++ b/transport.h
@@ -6,6 +6,7 @@
#include "list-objects-filter-options.h"
#include "string-list.h"
#include "connect.h"
+#include "odb.h"
struct git_transport_options {
unsigned thin : 1;
@@ -55,6 +56,10 @@ struct git_transport_options {
* common commits to this oidset instead of fetching any packfiles.
*/
struct oidset *acked_commits;
+
+ struct oid_array *object_info_oids;
+ struct object_info *object_info_data;
+ struct string_list *object_info_options;
};
enum transport_family {
@@ -309,6 +314,11 @@ int transport_get_remote_bundle_uri(struct transport *transport);
const struct git_hash_algo *transport_get_hash_algo(struct transport *transport);
int transport_fetch_refs(struct transport *transport, struct ref *refs);
+/*
+ * Fetch the object info from remote
+ */
+int transport_fetch_object_info(struct transport *transport);
+
/*
* If this flag is set, unlocking will avoid to call non-async-signal-safe
* functions. This will necessarily leave behind some data structures which
--
2.54.0
next prev parent reply other threads:[~2026-07-01 12:19 UTC|newest]
Thread overview: 278+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-28 19:04 [PATCH 0/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-06-28 19:04 ` [PATCH 1/6] fetch-pack: refactor packet writing Eric Ju
2024-07-04 16:59 ` Karthik Nayak
2024-07-08 15:17 ` Peijian Ju
2024-07-10 9:39 ` Karthik Nayak
2024-07-15 16:40 ` Peijian Ju
2024-06-28 19:04 ` [PATCH 2/6] fetch-pack: move fetch initialization Eric Ju
2024-06-28 19:05 ` [PATCH 3/6] serve: advertise object-info feature Eric Ju
2024-06-28 19:05 ` [PATCH 4/6] transport: add client support for object-info Eric Ju
2024-07-09 7:15 ` Toon claes
2024-07-09 16:37 ` Junio C Hamano
2024-07-13 2:32 ` Peijian Ju
2024-07-13 2:30 ` Peijian Ju
2024-07-10 10:13 ` Karthik Nayak
2024-07-16 2:39 ` Peijian Ju
2024-06-28 19:05 ` [PATCH 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-07-10 10:16 ` Karthik Nayak
2024-07-16 2:59 ` Peijian Ju
2024-06-28 19:05 ` [PATCH 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-07-09 1:50 ` Justin Tobler
2024-07-12 17:41 ` Peijian Ju
2024-07-09 7:16 ` Toon claes
2024-07-13 2:35 ` Peijian Ju
2024-07-10 12:08 ` Karthik Nayak
2024-07-17 2:38 ` Peijian Ju
2024-07-20 3:43 ` [PATCH v2 0/6] " Eric Ju
2024-07-20 3:43 ` [PATCH v2 1/6] fetch-pack: refactor packet writing Eric Ju
2024-09-24 11:45 ` Christian Couder
2024-09-25 20:42 ` Peijian Ju
2024-07-20 3:43 ` [PATCH v2 2/6] fetch-pack: move fetch initialization Eric Ju
2024-07-20 3:43 ` [PATCH v2 3/6] serve: advertise object-info feature Eric Ju
2024-07-20 3:43 ` [PATCH v2 4/6] transport: add client support for object-info Eric Ju
2024-09-24 11:45 ` Christian Couder
2024-09-24 17:29 ` Junio C Hamano
2024-09-25 18:29 ` Peijian Ju
2024-07-20 3:43 ` [PATCH v2 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-07-20 3:43 ` [PATCH v2 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-09-11 13:11 ` Toon Claes
2024-09-25 18:18 ` Peijian Ju
2024-09-24 12:13 ` Christian Couder
2024-09-25 18:12 ` Peijian Ju
2024-08-22 21:24 ` [PATCH 0/6] " Peijian Ju
2024-09-26 1:38 ` [PATCH v3 " Eric Ju
2024-09-26 1:38 ` [PATCH v3 1/6] fetch-pack: refactor packet writing Eric Ju
2024-09-26 1:38 ` [PATCH v3 2/6] fetch-pack: move fetch initialization Eric Ju
2024-09-26 1:38 ` [PATCH v3 3/6] serve: advertise object-info feature Eric Ju
2024-09-26 1:38 ` [PATCH v3 4/6] transport: add client support for object-info Eric Ju
2024-10-23 9:48 ` Christian Couder
2024-10-24 20:23 ` Peijian Ju
2024-09-26 1:38 ` [PATCH v3 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-09-26 1:38 ` [PATCH v3 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-10-23 9:49 ` Christian Couder
2024-10-23 20:25 ` Taylor Blau
2024-10-24 20:28 ` Peijian Ju
2024-10-24 20:28 ` Peijian Ju
2024-10-24 20:53 ` [PATCH v4 0/6] " Eric Ju
2024-10-24 20:53 ` [PATCH v4 1/6] fetch-pack: refactor packet writing Eric Ju
2024-10-25 9:52 ` karthik nayak
2024-10-25 16:06 ` Peijian Ju
2024-10-24 20:53 ` [PATCH v4 2/6] fetch-pack: move fetch initialization Eric Ju
2024-10-24 20:53 ` [PATCH v4 3/6] serve: advertise object-info feature Eric Ju
2024-10-24 20:53 ` [PATCH v4 4/6] transport: add client support for object-info Eric Ju
2024-10-25 10:12 ` karthik nayak
2024-10-28 5:39 ` Peijian Ju
2024-10-24 20:53 ` [PATCH v4 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-10-24 20:53 ` [PATCH v4 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-10-25 10:53 ` karthik nayak
2024-10-25 13:55 ` Christian Couder
2024-10-25 20:56 ` [PATCH v4 0/6] " Taylor Blau
2024-10-27 3:54 ` Peijian Ju
2024-10-28 0:01 ` Taylor Blau
2024-10-28 20:34 ` [PATCH v5 " Eric Ju
2024-10-28 20:34 ` [PATCH v5 1/6] fetch-pack: refactor packet writing Eric Ju
2024-11-05 17:44 ` Christian Couder
2024-11-06 1:06 ` Junio C Hamano
2024-11-06 18:00 ` Peijian Ju
2024-11-06 19:50 ` Peijian Ju
2024-10-28 20:34 ` [PATCH v5 2/6] fetch-pack: move fetch initialization Eric Ju
2024-10-28 20:34 ` [PATCH v5 3/6] serve: advertise object-info feature Eric Ju
2024-10-28 20:34 ` [PATCH v5 4/6] transport: add client support for object-info Eric Ju
2024-10-28 20:34 ` [PATCH v5 5/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-10-28 20:34 ` [PATCH v5 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-11-08 16:24 ` [PATCH v6 0/6] " Eric Ju
2024-11-08 16:24 ` [PATCH v6 1/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-11-08 16:24 ` [PATCH v6 2/6] fetch-pack: refactor packet writing Eric Ju
2024-11-08 16:24 ` [PATCH v6 3/6] fetch-pack: move fetch initialization Eric Ju
2024-11-08 16:24 ` [PATCH v6 4/6] serve: advertise object-info feature Eric Ju
2024-11-08 16:24 ` [PATCH v6 5/6] transport: add client support for object-info Eric Ju
2024-11-08 16:24 ` [PATCH v6 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-11-11 4:38 ` [PATCH v6 0/6] " Junio C Hamano
2024-11-18 16:28 ` Peijian Ju
2024-11-19 0:16 ` Junio C Hamano
2024-11-19 6:31 ` Patrick Steinhardt
2024-11-19 6:48 ` Junio C Hamano
2024-11-19 16:35 ` Peijian Ju
2024-11-20 1:19 ` Junio C Hamano
2024-11-25 5:36 ` [PATCH v7 " Eric Ju
2024-11-25 5:36 ` [PATCH v7 1/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-11-25 9:51 ` Patrick Steinhardt
2024-12-03 19:26 ` Peijian Ju
2024-11-25 5:36 ` [PATCH v7 2/6] fetch-pack: refactor packet writing Eric Ju
2024-11-25 9:51 ` Patrick Steinhardt
2024-12-03 19:09 ` Peijian Ju
2024-11-25 5:36 ` [PATCH v7 3/6] fetch-pack: move fetch initialization Eric Ju
2024-11-25 5:36 ` [PATCH v7 4/6] serve: advertise object-info feature Eric Ju
2024-11-25 5:36 ` [PATCH v7 5/6] transport: add client support for object-info Eric Ju
2024-11-25 9:51 ` Patrick Steinhardt
2024-12-03 3:15 ` Peijian Ju
2024-11-25 5:36 ` [PATCH v7 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2024-11-25 9:51 ` Patrick Steinhardt
2024-12-03 19:23 ` Peijian Ju
2024-12-05 9:50 ` Patrick Steinhardt
2024-12-05 10:34 ` Christian Couder
2024-12-23 23:25 ` [PATCH v8 0/6] " Eric Ju
2024-12-23 23:25 ` [PATCH v8 1/6] cat-file: add declaration of variable i inside its for loop Eric Ju
2024-12-23 23:25 ` [PATCH v8 2/6] fetch-pack: refactor packet writing Eric Ju
2024-12-23 23:25 ` [PATCH v8 3/6] fetch-pack: move fetch initialization Eric Ju
2024-12-23 23:25 ` [PATCH v8 4/6] serve: advertise object-info feature Eric Ju
2024-12-23 23:25 ` [PATCH v8 5/6] transport: add client support for object-info Eric Ju
2025-01-07 18:31 ` Calvin Wan
2025-01-07 18:53 ` Junio C Hamano
2025-01-08 15:55 ` Peijian Ju
2024-12-23 23:25 ` [PATCH v8 6/6] cat-file: add remote-object-info to batch-command Eric Ju
2025-01-07 21:29 ` Calvin Wan
2024-12-26 21:56 ` [PATCH v8 0/6] " Junio C Hamano
2024-12-30 23:25 ` Peijian Ju
2025-01-08 18:37 ` [PATCH v9 0/8] cat-file: " Eric Ju
2025-01-08 18:37 ` [PATCH v9 1/8] git-compat-util: add strtoul_ul() with error handling Eric Ju
2025-01-10 11:33 ` Christian Couder
2025-01-14 1:39 ` Peijian Ju
2025-01-08 18:37 ` [PATCH v9 2/8] cat-file: add declaration of variable i inside its for loop Eric Ju
2025-01-10 11:39 ` Christian Couder
2025-01-14 1:36 ` Peijian Ju
2025-01-08 18:37 ` [PATCH v9 3/8] cat-file: split test utility functions into a separate library file Eric Ju
2025-01-10 14:26 ` Christian Couder
2025-01-14 1:33 ` Peijian Ju
2025-01-08 18:37 ` [PATCH v9 4/8] fetch-pack: refactor packet writing Eric Ju
2025-01-08 18:37 ` [PATCH v9 5/8] fetch-pack: move fetch initialization Eric Ju
2025-01-08 18:37 ` [PATCH v9 6/8] serve: advertise object-info feature Eric Ju
2025-01-08 18:37 ` [PATCH v9 7/8] transport: add client support for object-info Eric Ju
2025-01-08 18:37 ` [PATCH v9 8/8] cat-file: add remote-object-info to batch-command Eric Ju
2025-01-10 11:20 ` Christian Couder
2025-01-14 1:24 ` Peijian Ju
2025-01-14 2:14 ` [PATCH v10 0/8] " Eric Ju
2025-01-14 2:14 ` [PATCH v10 1/8] git-compat-util: add strtoul_ul() with error handling Eric Ju
2025-01-14 2:14 ` [PATCH v10 2/8] cat-file: add declaration of variable i inside its for loop Eric Ju
2025-01-14 2:14 ` [PATCH v10 3/8] t1006: split test utility functions into new "lib-cat-file.sh" Eric Ju
2025-01-14 2:14 ` [PATCH v10 4/8] fetch-pack: refactor packet writing Eric Ju
2025-01-14 2:14 ` [PATCH v10 5/8] fetch-pack: move fetch initialization Eric Ju
2025-01-14 2:14 ` [PATCH v10 6/8] serve: advertise object-info feature Eric Ju
2025-01-14 2:14 ` [PATCH v10 7/8] transport: add client support for object-info Eric Ju
2025-02-01 2:08 ` Jeff King
2025-02-20 22:52 ` Peijian Ju
2025-01-14 2:15 ` [PATCH v10 8/8] cat-file: add remote-object-info to batch-command Eric Ju
2025-02-01 2:03 ` Jeff King
2025-02-21 15:34 ` Peijian Ju
2025-02-24 23:45 ` Jeff King
2025-03-12 19:53 ` Peijian Ju
2025-02-21 19:04 ` [PATCH v11 0/8] " Eric Ju
2025-02-21 19:04 ` [PATCH v11 1/8] git-compat-util: add strtoul_ul() with error handling Eric Ju
2025-02-21 19:04 ` [PATCH v11 2/8] cat-file: add declaration of variable i inside its for loop Eric Ju
2025-02-21 19:04 ` [PATCH v11 3/8] t1006: split test utility functions into new "lib-cat-file.sh" Eric Ju
2025-02-21 19:04 ` [PATCH v11 4/8] fetch-pack: refactor packet writing Eric Ju
2025-02-21 19:04 ` [PATCH v11 5/8] fetch-pack: move fetch initialization Eric Ju
2025-02-21 19:04 ` [PATCH v11 6/8] serve: advertise object-info feature Eric Ju
2025-02-21 19:04 ` [PATCH v11 7/8] transport: add client support for object-info Eric Ju
2025-02-21 19:04 ` [PATCH v11 8/8] cat-file: add remote-object-info to batch-command Eric Ju
2025-02-24 20:46 ` Junio C Hamano
2025-03-11 23:10 ` Peijian Ju
2025-02-24 23:47 ` Jeff King
2025-03-12 2:19 ` Peijian Ju
2025-03-13 6:02 ` Jeff King
2025-03-21 18:24 ` Peijian Ju
2025-03-24 3:39 ` Jeff King
2026-03-12 21:41 ` [GSoC] " Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 00/12] " Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 01/12] transport-helper: fix memory leak of helper on disconnect Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 02/12] git-compat-util: add strtoul_ul() with error handling Pablo Sabater
2026-06-09 6:20 ` Chandra Pratap
2026-06-08 10:14 ` [PATCH GSoC RFC v12 03/12] cat-file: add declaration of variable i inside its for loop Pablo Sabater
2026-06-08 14:52 ` Junio C Hamano
2026-06-09 17:55 ` Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 04/12] t1006: split test utility functions into new "lib-cat-file.sh" Pablo Sabater
2026-06-09 6:28 ` Chandra Pratap
2026-06-09 17:44 ` Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 05/12] fetch-pack: move function to connect.c Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 06/12] connect: refactor packet writing Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 07/12] fetch-pack: move fetch initialization Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 08/12] serve: advertise object-info feature Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 09/12] transport: add client support for object-info Pablo Sabater
2026-06-16 20:35 ` Junio C Hamano
2026-06-16 21:31 ` Junio C Hamano
2026-06-08 10:14 ` [PATCH GSoC RFC v12 10/12] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 11/12] cat-file: validate remote atoms with allow_list Pablo Sabater
2026-06-08 10:14 ` [PATCH GSoC RFC v12 12/12] cat-file: make remote-object-info allow-list dynamic Pablo Sabater
2026-06-09 15:32 ` Chandra Pratap
2026-06-09 17:34 ` Pablo Sabater
2026-06-17 10:16 ` Chandra Pratap
2026-06-09 18:54 ` Junio C Hamano
2026-06-19 14:56 ` [PATCH GSoC RFC v13 00/12] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 01/12] transport-helper: fix memory leak of helper on disconnect Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 02/12] git-compat-util: add strtoul_ul() with error handling Pablo Sabater
2026-06-19 15:06 ` Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 03/12] cat-file: declare loop counter inside for() Pablo Sabater
2026-06-22 10:08 ` Karthik Nayak
2026-06-19 14:56 ` [PATCH GSoC RFC v13 04/12] t1006: split test utility functions into new "lib-cat-file.sh" Pablo Sabater
2026-06-19 15:02 ` Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 05/12] fetch-pack: move function to connect.c Pablo Sabater
2026-06-21 5:37 ` Chandra Pratap
2026-06-24 12:24 ` Pablo Sabater
2026-06-22 10:30 ` Karthik Nayak
2026-06-24 12:21 ` Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 06/12] connect: refactor packet writing Pablo Sabater
2026-06-22 20:43 ` Karthik Nayak
2026-06-24 12:08 ` Pablo Sabater
2026-06-24 13:25 ` Karthik Nayak
2026-06-24 20:19 ` Junio C Hamano
2026-06-26 14:39 ` Karthik Nayak
2026-06-19 14:56 ` [PATCH GSoC RFC v13 07/12] fetch-pack: move fetch initialization Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 08/12] serve: advertise object-info feature Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 09/12] transport: add client support for object-info Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 10/12] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-06-21 6:01 ` Chandra Pratap
2026-06-21 20:02 ` Junio C Hamano
2026-06-19 14:56 ` [PATCH GSoC RFC v13 11/12] cat-file: validate remote atoms with allow_list Pablo Sabater
2026-06-19 14:56 ` [PATCH GSoC RFC v13 12/12] cat-file: make remote-object-info allow-list dynamic Pablo Sabater
2026-06-21 6:19 ` Chandra Pratap
2026-06-21 6:27 ` Chandra Pratap
2026-06-21 5:25 ` [PATCH GSoC RFC v13 00/12] cat-file: add remote-object-info to batch-command Chandra Pratap
2026-06-25 12:13 ` [PATCH GSoC v14 00/13] " Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 01/13] transport-helper: fix memory leak of helper on disconnect Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 02/13] git-compat-util: add strtoul_szt() with error handling Pablo Sabater
2026-06-25 21:09 ` Junio C Hamano
2026-06-26 12:00 ` Pablo Sabater
2026-06-26 16:43 ` Karthik Nayak
2026-06-25 12:13 ` [PATCH GSoC v14 03/13] cat-file: declare loop counter inside for() Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 04/13] t1006: split test utility functions into new "lib-cat-file.sh" Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 05/13] fetch-pack: prepare function to be moved Pablo Sabater
2026-06-26 12:14 ` Chandra Pratap
2026-06-26 16:54 ` Karthik Nayak
2026-06-27 21:06 ` Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 06/13] fetch-pack: move function to connect.c Pablo Sabater
2026-06-26 12:14 ` Chandra Pratap
2026-06-27 21:04 ` Pablo Sabater
2026-06-26 16:57 ` Karthik Nayak
2026-06-27 21:03 ` Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 07/13] connect: refactor packet writing Pablo Sabater
2026-06-26 17:03 ` Karthik Nayak
2026-06-27 20:58 ` Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 08/13] fetch-pack: move fetch initialization Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 09/13] serve: advertise object-info feature Pablo Sabater
2026-06-26 22:23 ` Karthik Nayak
2026-06-27 17:52 ` Pablo Sabater
2026-06-28 22:55 ` Karthik Nayak
2026-06-25 12:13 ` [PATCH GSoC v14 10/13] transport: add client support for object-info Pablo Sabater
2026-06-27 0:22 ` Karthik Nayak
2026-06-27 19:44 ` Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 11/13] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-06-27 13:14 ` Karthik Nayak
2026-06-27 20:51 ` Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 12/13] cat-file: validate remote atoms with allow_list Pablo Sabater
2026-06-25 12:13 ` [PATCH GSoC v14 13/13] cat-file: make remote-object-info allow-list dynamic Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 00/13] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 01/13] transport-helper: fix memory leak of helper on disconnect Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 02/13] git-compat-util: add `strtoumax_szt()` with error handling Pablo Sabater
2026-07-01 17:30 ` Junio C Hamano
2026-07-01 12:18 ` [PATCH GSoC v15 03/13] cat-file: declare loop counter inside for() Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 04/13] t1006: split test utility functions into new 'lib-cat-file.sh' Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 05/13] fetch-pack: drop static `advertise_sid` variable Pablo Sabater
2026-07-01 18:19 ` Junio C Hamano
2026-07-01 12:18 ` [PATCH GSoC v15 06/13] fetch-pack: move `write_fetch_command_and_capabilities()` to connect.c Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 07/13] connect: make `write_fetch_command_and_capabilities()` more generic Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 08/13] fetch-pack: move fetch initialization Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 09/13] serve: advertise object-info feature Pablo Sabater
2026-07-01 12:18 ` Pablo Sabater [this message]
2026-07-01 12:18 ` [PATCH GSoC v15 11/13] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 12/13] cat-file: validate remote atoms with an allow-list Pablo Sabater
2026-07-01 12:18 ` [PATCH GSoC v15 13/13] cat-file: make remote-object-info allow-list dynamic 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=20260701-ps-eric-work-rebase-v15-10-c88a43b63917@gmail.com \
--to=pabloosabaterr@gmail.com \
--cc=calvinwan@google.com \
--cc=chandrapratap3519@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=eric.peijian@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jltobler@gmail.com \
--cc=jonathantanmy@google.com \
--cc=karthik.188@gmail.com \
--cc=peff@peff.net \
--cc=toon@iotcl.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