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
Subject: [PATCH GSoC v19 13/13] cat-file: make remote-object-info allow-list adapt to the server
Date: Fri, 17 Jul 2026 17:05:23 +0200 [thread overview]
Message-ID: <20260717-ps-eric-work-rebase-v19-13-d4faee35764b@gmail.com> (raw)
In-Reply-To: <20260717-ps-eric-work-rebase-v19-0-d4faee35764b@gmail.com>
The static allow-list in expand_atom() is hardcoded to allow only
"objectname" and "objectsize" for remote queries. This works because,
up to this point, servers will either support object-info with name
and size or they do not support them at all.
As object-info gains new capabilities, we cannot expect different
servers with different Git versions to have the same object-info
capabilities. Therefore, the client needs to adapt its allow-list to
what the server advertises.
The client now:
1. Requests the protocol option that the placeholder refers to (i.e.
"size" for "%(objectsize)").
2. Drops any requested option that the server does not advertise in
fetch_object_info().
3. Maps the remaining advertised options back to their placeholders and
populates remote_allowed_atoms.
4. Uses remote_allowed_atoms in expand_atom(), preserving the previous
behavior for supported placeholders.
For example, if the client requests "%(objectsize) %(objecttype)" and
the server only supports 'size', then the client only requests 'size'.
The server returns the size (i.e "42") "%(objectsize)" is expanded
normally while "%(objecttype)" expands to an empty string:
"42 "
Note that the empty string expansion is only for known but unsupported
placeholders. "%(objectcolor)" which doesn't exist would die().
This honors what for-each-ref does for known but inapplicable atoms
(placeholders).
Move object_info_options out of get_remote_info() so the caller which
has data can select what options will be requested instead of requesting
always size.
Move batch_object_write() out so output is always produced.
If there are no supported attributes, the output is a blank line.
Include "type" in the object_info_options even though the client does
not yet know how to parse the server's "type" capability.
As a result, "type" is always filtered out, allowing the tests to verify
that known but unsupported placeholders expand to an empty string.
Since the filter removes options by swapping with the last element,
the list is no longer kept sorted. Drop the pre-sort in
fetch_object_info_via_pack() and use the unsorted string_list lookup
for the response header. This has no effect in performance as the list
can only be two entries long ('size' and 'type').
Mentored-by: Karthik Nayak <karthik.188@gmail.com>
Mentored-by: Chandra Pratap <chandrapratap3519@gmail.com>
Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
---
builtin/cat-file.c | 86 +++++++++++++++++++++-------------
fetch-object-info.c | 20 +++++++-
fetch-object-info.h | 3 ++
t/t1017-cat-file-remote-object-info.sh | 28 +++++++++++
transport.c | 1 -
5 files changed, 104 insertions(+), 34 deletions(-)
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index f5e5528a21..7a0431bf2b 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -338,13 +338,11 @@ struct expand_data {
* Flags about when an object info is being fetched from remote.
*/
unsigned is_remote:1;
-};
-#define EXPAND_DATA_INIT { .mode = S_IFINVALID, .type = OBJ_BAD }
-static const char *remote_object_info_atoms[] = {
- "objectname",
- "objectsize",
+ struct string_list remote_allowed_atoms;
};
+#define EXPAND_DATA_INIT { .mode = S_IFINVALID, .type = OBJ_BAD, \
+ .remote_allowed_atoms = STRING_LIST_INIT_NODUP }
static int is_atom(const char *atom, const char *s, int slen)
{
@@ -356,17 +354,11 @@ static int expand_atom(struct strbuf *sb, const char *atom, int len,
struct expand_data *data)
{
if (data->is_remote) {
- size_t i, allowed_nr = ARRAY_SIZE(remote_object_info_atoms);
- for (i = 0; i < allowed_nr; i++)
- if (is_atom(remote_object_info_atoms[i], atom, len))
+ size_t i;
+ for (i = 0; i < data->remote_allowed_atoms.nr; i++)
+ if (is_atom(data->remote_allowed_atoms.items[i].string, atom, len))
break;
-
- /*
- * On remote, skip unsupported atoms returning an empty sb,
- * honoring how for-each-ref handles known but inapplicable
- * atoms (e.g. %(tagger)).
- */
- if (i == allowed_nr)
+ if (i == data->remote_allowed_atoms.nr)
return 1;
}
@@ -682,12 +674,12 @@ static void batch_one_object(const char *obj_name,
static int get_remote_info(int argc,
const char **argv,
struct object_info **remote_object_info,
- struct oid_array *object_info_oids)
+ struct oid_array *object_info_oids,
+ struct string_list *object_info_options)
{
int retval = 0;
struct remote *remote = NULL;
struct object_id oid;
- struct string_list object_info_options = STRING_LIST_INIT_NODUP;
struct transport *gtransport;
remote = remote_get(argv[0]);
@@ -727,13 +719,10 @@ static int get_remote_info(int argc,
CALLOC_ARRAY(*remote_object_info, object_info_oids->nr);
gtransport->smart_options->object_info_oids = object_info_oids;
- string_list_append(&object_info_options, "size");
-
- gtransport->smart_options->object_info_options = &object_info_options;
+ gtransport->smart_options->object_info_options = object_info_options;
gtransport->smart_options->object_info_data = *remote_object_info;
retval = transport_fetch_object_info(gtransport);
cleanup:
- string_list_clear(&object_info_options, 0);
transport_disconnect(gtransport);
return retval;
}
@@ -819,6 +808,21 @@ static void parse_cmd_mailmap(struct batch_options *opt UNUSED,
load_mailmap();
}
+struct protocol_placeholder_entry {
+ const char *option;
+ const char *atom;
+};
+
+static const struct protocol_placeholder_entry remote_atom_map[] = {
+ {"size", "objectsize"},
+ {"type", "objecttype"},
+ /*
+ * Add new protocol options here. Even if the server doesn't support
+ * them the allow_list will drop them if the server doesn't advertise
+ * them.
+ */
+};
+
static void parse_cmd_remote_object_info(struct batch_options *opt,
const char *line, struct strbuf *output,
struct expand_data *data)
@@ -828,6 +832,7 @@ static void parse_cmd_remote_object_info(struct batch_options *opt,
char *line_to_split;
struct object_info *remote_object_info = NULL;
struct oid_array object_info_oids = OID_ARRAY_INIT;
+ struct string_list object_info_options = STRING_LIST_INIT_NODUP;
const char *saved_format = opt->format;
if (strlen(line) >= MAX_REMOTE_OBJ_INFO_LINE)
@@ -846,10 +851,22 @@ static void parse_cmd_remote_object_info(struct batch_options *opt,
die(_("remote-object-info supports at most %d objects"),
MAX_ALLOWED_OBJ_LIMIT);
+ if (data->info.sizep)
+ string_list_append(&object_info_options, "size");
+ if (data->info.typep)
+ string_list_append(&object_info_options, "type");
+
if (get_remote_info(count, argv, &remote_object_info,
- &object_info_oids))
+ &object_info_oids, &object_info_options))
die(_("failed to get object info from the remote: %s"), argv[0]);
+ string_list_clear(&data->remote_allowed_atoms, 0);
+ string_list_append(&data->remote_allowed_atoms, "objectname");
+ for (size_t i = 0; i < ARRAY_SIZE(remote_atom_map); i++)
+ if (unsorted_string_list_has_string(&object_info_options, remote_atom_map[i].option))
+ string_list_append(&data->remote_allowed_atoms,
+ remote_atom_map[i].atom);
+
data->skip_object_info = 1;
for (size_t i = 0; i < object_info_oids.nr; i++) {
data->oid = object_info_oids.oid[i];
@@ -860,25 +877,29 @@ static void parse_cmd_remote_object_info(struct batch_options *opt,
continue;
}
+ /*
+ * When reaching here, it means remote-object-info can retrieve
+ * information from server without downloading them.
+ */
if (remote_object_info[i].sizep) {
- /*
- * When reaching here, it means remote-object-info can retrieve
- * information from server without downloading them.
- */
data->size = *remote_object_info[i].sizep;
- opt->batch_mode = BATCH_MODE_INFO;
- data->is_remote = 1;
- batch_object_write(argv[i + 1], output, opt, data, NULL, 0);
- data->is_remote = 0;
- } else {
- report_object_status(opt, oid_to_hex(&data->oid), &data->oid, "missing");
}
+
+ if (remote_object_info[i].typep) {
+ data->type = *remote_object_info[i].typep;
+ }
+
+ opt->batch_mode = BATCH_MODE_INFO;
+ data->is_remote = 1;
+ batch_object_write(argv[i + 1], output, opt, data, NULL, 0);
+ data->is_remote = 0;
}
data->skip_object_info = 0;
opt->format = saved_format;
for (size_t i = 0; i < object_info_oids.nr; i++)
free_object_info_contents(&remote_object_info[i]);
+ string_list_clear(&object_info_options, 0);
free(line_to_split);
free(argv);
free(remote_object_info);
@@ -1198,6 +1219,7 @@ static int batch_objects(struct batch_options *opt)
cleanup:
strbuf_release(&input);
strbuf_release(&output);
+ string_list_clear(&data.remote_allowed_atoms, 0);
cfg->warn_on_object_refname_ambiguity = save_warning;
return retval;
}
diff --git a/fetch-object-info.c b/fetch-object-info.c
index 30475a1e87..ba7e179c44 100644
--- a/fetch-object-info.c
+++ b/fetch-object-info.c
@@ -55,6 +55,24 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
case protocol_v2:
if (!server_supports_v2("object-info"))
die(_("object-info capability is not enabled on the server"));
+ /*
+ * When removing an element from the list it gets swapped by the
+ * last element, iterate backwards to prevent elements skipping
+ * evaluation.
+ *
+ * object_info_options->nr can be safely casted without overflow
+ * because the number of options is a small known number (the
+ * supported placeholders which currently are size and type).
+ */
+ for (int i = (int)args->object_info_options->nr - 1; i >= 0; i--)
+ if (!server_supports_feature("object-info",
+ args->object_info_options->items[i].string, 0))
+ unsorted_string_list_delete_item(args->object_info_options, i, 0);
+
+ /*
+ * Even if no options are left, we still send the oid so we get
+ * at least an existence check.
+ */
send_object_info_request(fd_out, args);
break;
case protocol_v1:
@@ -71,7 +89,7 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
return -1;
}
- if (!string_list_has_string(args->object_info_options, reader->line))
+ if (!unsorted_string_list_has_string(args->object_info_options, reader->line))
return -1;
if (!strcmp(reader->line, "size")) {
diff --git a/fetch-object-info.h b/fetch-object-info.h
index 31aad98408..269cebb3f7 100644
--- a/fetch-object-info.h
+++ b/fetch-object-info.h
@@ -14,6 +14,9 @@ struct object_info;
/*
* Sends git-cat-file object-info command into the request buf and read the
* results from packets.
+ *
+ * Modifies args->object_info_options, on return it contains only the supported
+ * options by the server.
*/
int fetch_object_info(enum protocol_version version, struct object_info_args *args,
struct packet_reader *reader, struct object_info *object_info_data,
diff --git a/t/t1017-cat-file-remote-object-info.sh b/t/t1017-cat-file-remote-object-info.sh
index edc20394d8..116862f9d0 100755
--- a/t/t1017-cat-file-remote-object-info.sh
+++ b/t/t1017-cat-file-remote-object-info.sh
@@ -271,6 +271,34 @@ test_expect_success 'unsupported placeholder on remote returns empty string' '
)
'
+test_expect_success 'requesting only objectname echoes back' '
+ (
+ set_transport_variables "$daemon_parent" &&
+ cd "$daemon_parent/daemon_client_empty" &&
+
+ echo $hello_oid >expect &&
+ git cat-file --batch-command="%(objectname)" >actual <<-EOF &&
+ remote-object-info "$GIT_DAEMON_URL/parent" $hello_oid
+ EOF
+ test_cmp expect actual
+ )
+'
+
+test_expect_success 'objectname goes through existence check' '
+ (
+ set_transport_variables "$daemon_parent" &&
+ cd "$daemon_parent/daemon_client_empty" &&
+
+ echo "$unstored_oid missing" >expect &&
+
+ git cat-file --batch-command="%(objectname)" >actual <<-EOF &&
+ remote-object-info "$GIT_DAEMON_URL/parent" $unstored_oid
+ EOF
+
+ test_cmp expect actual
+ )
+'
+
# Test --batch-command remote-object-info with 'git://' and
# transfer.advertiseobjectinfo set to false, i.e. server does not have object-info capability
test_expect_success 'batch-command remote-object-info git:// fails when transfer.advertiseobjectinfo=false' '
diff --git a/transport.c b/transport.c
index 9342680531..f0a6a45547 100644
--- a/transport.c
+++ b/transport.c
@@ -443,7 +443,6 @@ static int fetch_object_info_via_pack(struct transport *transport)
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,
--
2.54.0
prev parent reply other threads:[~2026-07-17 15:05 UTC|newest]
Thread overview: 362+ 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-07 8:50 ` Pablo Sabater
2026-07-07 18:09 ` Junio C Hamano
2026-07-07 19:53 ` Pablo Sabater
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 ` [PATCH GSoC v15 10/13] transport: add client support for object-info Pablo Sabater
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
2026-07-10 16:41 ` [PATCH GSoC v16 00/13] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 01/13] transport-helper: fix memory leak of helper on disconnect Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 02/13] cat-file: declare loop counter inside for() Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 03/13] t1006: split test utility functions into new 'lib-cat-file.sh' Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 04/13] fetch-pack: fix hash_algo variable type Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 05/13] fetch-pack: drop static advertise_sid variable Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 06/13] fetch-pack: move write_fetch_command_and_capabilities() to connect.c Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 07/13] connect: make write_fetch_command_and_capabilities() more generic Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 08/13] fetch-pack: move fetch initialization Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 09/13] serve: advertise object-info feature Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 10/13] transport: add client support for object-info Pablo Sabater
2026-07-14 11:28 ` Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 11/13] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 12/13] cat-file: validate remote atoms with an allow-list Pablo Sabater
2026-07-10 16:41 ` [PATCH GSoC v16 13/13] cat-file: make remote-object-info allow-list dynamic Pablo Sabater
2026-07-12 5:26 ` [PATCH GSoC v16 00/13] cat-file: add remote-object-info to batch-command Chandra Pratap
2026-07-14 11:44 ` [PATCH GSoC v17 " Pablo Sabater
2026-07-14 11:44 ` [PATCH GSoC v17 01/13] transport-helper: fix memory leak of helper on disconnect Pablo Sabater
2026-07-14 11:44 ` [PATCH GSoC v17 02/13] cat-file: declare loop counter inside for() Pablo Sabater
2026-07-14 11:44 ` [PATCH GSoC v17 03/13] t1006: split test utility functions into new 'lib-cat-file.sh' Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 04/13] fetch-pack: fix hash_algo variable type Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 05/13] fetch-pack: drop static advertise_sid variable Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 06/13] fetch-pack: move write_fetch_command_and_capabilities() to connect.c Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 07/13] connect: make write_fetch_command_and_capabilities() more generic Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 08/13] fetch-pack: move fetch initialization Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 09/13] serve: advertise object-info feature Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 10/13] transport: add client support for object-info Pablo Sabater
2026-07-14 17:58 ` Junio C Hamano
2026-07-14 19:33 ` Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 11/13] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 12/13] cat-file: validate remote atoms with an allow-list Pablo Sabater
2026-07-14 11:45 ` [PATCH GSoC v17 13/13] cat-file: make remote-object-info allow-list dynamic Pablo Sabater
2026-07-14 18:33 ` [PATCH GSoC v17 00/13] cat-file: add remote-object-info to batch-command Junio C Hamano
2026-07-14 22:50 ` Pablo Sabater
2026-07-15 0:58 ` Junio C Hamano
2026-07-15 8:48 ` Pablo Sabater
2026-07-15 15:23 ` Junio C Hamano
2026-07-15 15:36 ` Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 " Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 01/13] transport-helper: fix memory leak of helper on disconnect Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 02/13] cat-file: declare loop counter inside for() Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 03/13] t1006: split test utility functions into new 'lib-cat-file.sh' Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 04/13] fetch-pack: fix hash_algo variable type Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 05/13] fetch-pack: drop static advertise_sid variable Pablo Sabater
2026-07-15 21:48 ` Karthik Nayak
2026-07-16 14:52 ` Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 06/13] fetch-pack: move write_fetch_command_and_capabilities() to connect.c Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 07/13] connect: make write_fetch_command_and_capabilities() more generic Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 08/13] fetch-pack: move fetch initialization Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 09/13] serve: advertise object-info feature Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 10/13] transport: add client support for object-info Pablo Sabater
2026-07-15 17:22 ` Junio C Hamano
2026-07-15 18:08 ` Pablo Sabater
2026-07-16 16:37 ` Junio C Hamano
2026-07-15 9:52 ` [PATCH GSoC v18 11/13] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-07-15 17:31 ` Junio C Hamano
2026-07-15 18:06 ` Pablo Sabater
2026-07-15 22:27 ` Karthik Nayak
2026-07-15 9:52 ` [PATCH GSoC v18 12/13] cat-file: validate remote atoms with an allow-list Pablo Sabater
2026-07-15 9:52 ` [PATCH GSoC v18 13/13] cat-file: make remote-object-info allow-list dynamic Pablo Sabater
2026-07-15 17:56 ` Junio C Hamano
2026-07-15 18:52 ` Pablo Sabater
2026-07-15 20:32 ` Junio C Hamano
2026-07-15 21:44 ` Pablo Sabater
2026-07-16 1:30 ` Junio C Hamano
2026-07-16 1:47 ` Pablo Sabater
2026-07-15 22:35 ` [PATCH GSoC v18 00/13] cat-file: add remote-object-info to batch-command Karthik Nayak
2026-07-17 15:05 ` [PATCH GSoC v19 " Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 01/13] transport-helper: fix memory leak of helper on disconnect Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 02/13] cat-file: declare loop counter inside for() Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 03/13] t1006: extract helper functions into new 'lib-cat-file.sh' Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 04/13] fetch-pack: drop the static advertise_sid variable Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 05/13] fetch-pack: move write_fetch_command_and_capabilities() to connect.c Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 06/13] connect: use unsigned int for hash_algo_by_name() calls Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 07/13] connect: make write_fetch_command_and_capabilities() more generic Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 08/13] fetch-pack: move fetch initialization Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 09/13] protocol-caps: check object existence regardless of the attributes requested Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 10/13] serve: advertise object-info feature Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 11/13] transport: add client support for object-info Pablo Sabater
2026-07-17 15:05 ` [PATCH GSoC v19 12/13] cat-file: add remote-object-info to batch-command Pablo Sabater
2026-07-17 15:05 ` Pablo Sabater [this message]
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=20260717-ps-eric-work-rebase-v19-13-d4faee35764b@gmail.com \
--to=pabloosabaterr@gmail.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=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