All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pablo Sabater <pabloosabaterr@gmail.com>
To: git@vger.kernel.org
Cc: chandrapratap3519@gmail.com, karthik.188@gmail.com,
	gitster@pobox.com,  peff@peff.net,
	Pablo Sabater <pabloosabaterr@gmail.com>
Subject: [PATCH GSoC v4 3/9] fetch-object-info: pass arguments directly instead of a struct
Date: Tue, 04 Aug 2026 20:42:57 +0200	[thread overview]
Message-ID: <20260804-objecttype-support-v4-3-31511b0231be@gmail.com> (raw)
In-Reply-To: <20260804-objecttype-support-v4-0-31511b0231be@gmail.com>

struct object_info_args groups three pointers that already live in the
transport and are given to fetch_object_info().
Grouping them into a struct reduces the number of parameters, but it
suggests that the three belong together, when they are unrelated and end
up being accessed as args->* independently.

Drop the struct and pass those parameters directly to
fetch_object_info() and send_object_info_request(). This should have no
change in behavior.

Helped-by: Jeff King <peff@peff.net>
Helped-by: Junio C Hamano <gitster@pobox.com>
Mentored-by: Karthik Nayak <karthik.188@gmail.com>
Mentored-by: Chandra Pratap <chandrapratap3519@gmail.com>
Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
---
 fetch-object-info.c | 53 +++++++++++++++++++++++++++++++----------------------
 fetch-object-info.h | 17 ++++++++---------
 transport.c         | 11 +++++------
 3 files changed, 44 insertions(+), 37 deletions(-)

diff --git a/fetch-object-info.c b/fetch-object-info.c
index c2d4bf9403..531610e6f4 100644
--- a/fetch-object-info.c
+++ b/fetch-object-info.c
@@ -9,20 +9,24 @@
 #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)
+static void send_object_info_request(const int fd_out,
+				     const struct string_list *server_options,
+				     struct oid_array *oids,
+				     struct string_list *object_info_options)
 {
 	struct strbuf req_buf = STRBUF_INIT;
 
-	write_command_and_capabilities(&req_buf, "object-info", args->server_options);
+	write_command_and_capabilities(&req_buf, "object-info", server_options);
 
-	if (unsorted_string_list_has_string(args->object_info_options, "size"))
+	if (unsorted_string_list_has_string(object_info_options, "size"))
 		packet_buf_write(&req_buf, "size");
-	else if (args->object_info_options->nr)
+	else if (object_info_options->nr)
 		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]));
+	if (oids)
+		for (size_t i = 0; i < oids->nr; i++)
+			packet_buf_write(&req_buf, "oid %s",
+					 oid_to_hex(&oids->oid[i]));
 
 	packet_buf_flush(&req_buf);
 	if (write_in_full(fd_out, req_buf.buf, req_buf.len) < 0)
@@ -45,8 +49,12 @@ static int parse_object_size(const char *s, size_t *res)
 	return 0;
 }
 
-int fetch_object_info(const enum protocol_version version, struct object_info_args *args,
-		      struct packet_reader *reader, struct object_info *object_info_data,
+int fetch_object_info(const enum protocol_version version,
+		      const struct string_list *server_options,
+		      struct oid_array *oids,
+		      struct string_list *object_info_options,
+		      struct packet_reader *reader,
+		      struct object_info *object_info_data,
 		      const int stateless_rpc, const int fd_out)
 {
 	int size_index = -1;
@@ -64,16 +72,17 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
 		 * 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--)
+		for (int i = (int)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);
+						     object_info_options->items[i].string, 0))
+				unsorted_string_list_delete_item(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);
+		send_object_info_request(fd_out, server_options, oids,
+					 object_info_options);
 		break;
 	case protocol_v1:
 	case protocol_v0:
@@ -82,14 +91,14 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
 		BUG("unknown protocol version");
 	}
 
-	for (size_t i = 0; i < args->object_info_options->nr; i++) {
+	for (size_t i = 0; i < 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 (!unsorted_string_list_has_string(args->object_info_options, reader->line))
+		if (!unsorted_string_list_has_string(object_info_options, reader->line))
 			return -1;
 
 		if (!strcmp(reader->line, "size")) {
@@ -98,7 +107,7 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
 			 * is only size. No risk of overflow.
 			 */
 			size_index = (int)i;
-			for (size_t j = 0; j < args->oids->nr; j++)
+			for (size_t j = 0; j < oids->nr; j++)
 				object_info_data[j].sizep =
 					xcalloc(1, sizeof(*object_info_data[j].sizep));
 		} else {
@@ -106,19 +115,19 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
 		}
 	}
 
-	for (size_t i = 0; i < args->oids->nr; i++) {
+	for (size_t i = 0; i < oids->nr; i++) {
 		struct string_list object_info_values = STRING_LIST_INIT_DUP;
 
 		if (packet_reader_read(reader) != PACKET_READ_NORMAL)
 			die(_("object-info: expected %" PRIuMAX " objects, got %" PRIuMAX),
-			    (uintmax_t)args->oids->nr, (uintmax_t)i);
+			    (uintmax_t)oids->nr, (uintmax_t)i);
 
 		string_list_split(&object_info_values, reader->line, " ", -1);
 
 		if (strcmp(object_info_values.items[0].string,
-			   oid_to_hex(&args->oids->oid[i])))
+			   oid_to_hex(&oids->oid[i])))
 			die(_("object-info: expected OID: %s, got %s"),
-			    oid_to_hex(&args->oids->oid[i]),
+			    oid_to_hex(&oids->oid[i]),
 			    object_info_values.items[0].string);
 
 		/*
@@ -138,7 +147,7 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
 		 * the server we expect the server to answer with the same
 		 * number of attributes requested.
 		 */
-		if (args->object_info_options->nr + 1 != object_info_values.nr)
+		if (object_info_options->nr + 1 != object_info_values.nr)
 			die("object-info: unexpected number of attributes: %s",
 			    reader->line);
 
@@ -154,7 +163,7 @@ int fetch_object_info(const enum protocol_version version, struct object_info_ar
 
 	if (packet_reader_read(reader) != PACKET_READ_FLUSH)
 		die(_("object-info: expected flush after %"PRIuMAX" objects"),
-		    (uintmax_t)args->oids->nr);
+		    (uintmax_t)oids->nr);
 
 	check_stateless_delimiter(stateless_rpc, reader, "stateless delimiter expected");
 
diff --git a/fetch-object-info.h b/fetch-object-info.h
index 269cebb3f7..316bf917ce 100644
--- a/fetch-object-info.h
+++ b/fetch-object-info.h
@@ -4,22 +4,21 @@
 #include "pkt-line.h"
 #include "protocol.h"
 
-struct object_info_args {
-	struct string_list *object_info_options;
-	const struct string_list *server_options;
-	struct oid_array *oids;
-};
-
 struct object_info;
+struct oid_array;
 /*
  * 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
+ * Modifies 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,
+int fetch_object_info(enum protocol_version version,
+		      const struct string_list *server_options,
+		      struct oid_array *oids,
+		      struct string_list *object_info_options,
+		      struct packet_reader *reader,
+		      struct object_info *object_info_data,
 		      int stateless_rpc, int fd_out);
 
 #endif /* FETCH_OBJECT_INFO_H */
diff --git a/transport.c b/transport.c
index 42b0a2d0bd..2bb5eedc32 100644
--- a/transport.c
+++ b/transport.c
@@ -438,11 +438,6 @@ 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;
 
 	connect_setup(transport, 0);
 	packet_reader_init(&reader, data->fd[0], NULL, 0,
@@ -453,7 +448,11 @@ static int fetch_object_info_via_pack(struct transport *transport)
 	data->version = discover_version(&reader);
 	transport->hash_algo = reader.hash_algo;
 
-	ret = fetch_object_info(data->version, &args, &reader,
+	ret = fetch_object_info(data->version,
+				transport->server_options,
+				transport->smart_options->object_info_oids,
+				transport->smart_options->object_info_options,
+				&reader,
 				data->options.object_info_data,
 				transport->stateless_rpc, data->fd[1]);
 

-- 
2.54.0


  parent reply	other threads:[~2026-08-04 18:43 UTC|newest]

Thread overview: 111+ 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 23:16     ` Junio C Hamano
2026-07-31 19:49   ` [PATCH GSoC v2 2/6] t5701: use the test_file_size() helper Pablo Sabater
2026-08-01  4:27     ` Junio C Hamano
2026-08-01 20:49       ` Pablo Sabater
2026-07-31 19:49   ` [PATCH GSoC v2 3/6] protocol-caps: add type support to object-info Pablo Sabater
2026-08-01  4:55     ` Junio C Hamano
2026-07-31 19:49   ` [PATCH GSoC v2 4/6] fetch-object-info: parse type from server response Pablo Sabater
2026-08-01  5:04     ` Junio C Hamano
2026-08-01 13:38       ` Junio C Hamano
2026-08-01 22:20         ` Pablo Sabater
2026-08-01 23:14           ` Jeff King
2026-08-01 23:29             ` Jeff King
2026-08-02  2:02               ` Junio C Hamano
2026-08-02 12:33                 ` Pablo Sabater
2026-08-02 15:43                   ` Jeff King
2026-08-02 16:35                     ` Junio C Hamano
2026-08-02 16:24                   ` Junio C Hamano
2026-08-02 16:38                     ` Jeff King
2026-08-02 22:24                       ` Junio C Hamano
2026-08-01 21:28       ` Pablo Sabater
2026-07-31 19:49   ` [PATCH GSoC v2 5/6] serve: advertise type capability Pablo Sabater
2026-08-01 12:12     ` Chandra Pratap
2026-08-01 21:30       ` Pablo Sabater
2026-07-31 19:49   ` [PATCH GSoC v2 6/6] cat-file: unify default format Pablo Sabater
2026-08-03 14:39 ` [PATCH GSoC v3 0/8] cat-file: extend remote-object-info to support %(objecttype) Pablo Sabater
2026-08-03 14:39   ` [PATCH GSoC v3 1/8] t5701: use test_file_size() to get the size of a file Pablo Sabater
2026-08-03 17:21     ` Junio C Hamano
2026-08-03 21:12       ` Pablo Sabater
2026-08-03 14:39   ` [PATCH GSoC v3 2/8] fetch-object-info: detect truncated server responses Pablo Sabater
2026-08-03 18:18     ` Junio C Hamano
2026-08-03 21:30       ` Pablo Sabater
2026-08-03 14:39   ` [PATCH GSoC v3 3/8] fetch-object-info: pass arguments directly instead of a struct Pablo Sabater
2026-08-03 18:23     ` Junio C Hamano
2026-08-04 15:23     ` Karthik Nayak
2026-08-04 15:34       ` Pablo Sabater
2026-08-03 14:39   ` [PATCH GSoC v3 4/8] fetch-object-info: use dedicated struct for the results Pablo Sabater
2026-08-03 18:28     ` Junio C Hamano
2026-08-03 21:46       ` Pablo Sabater
2026-08-03 14:39   ` [PATCH GSoC v3 5/8] protocol-caps: add type support to object-info Pablo Sabater
2026-08-03 14:39   ` [PATCH GSoC v3 6/8] fetch-object-info: parse type from server response Pablo Sabater
2026-08-03 14:39   ` [PATCH GSoC v3 7/8] serve: advertise type capability Pablo Sabater
2026-08-03 14:39   ` [PATCH GSoC v3 8/8] cat-file: unify default format Pablo Sabater
2026-08-04 18:42 ` [PATCH GSoC v4 0/9] cat-file: extend remote-object-info to support %(objecttype) Pablo Sabater
2026-08-04 18:42   ` [PATCH GSoC v4 1/9] t5701: use test_file_size() to get the size of a file Pablo Sabater
2026-08-04 18:42   ` [PATCH GSoC v4 2/9] fetch-object-info: detect malformed server responses Pablo Sabater
2026-08-04 20:40     ` Junio C Hamano
2026-08-04 18:42   ` Pablo Sabater [this message]
2026-08-04 20:44     ` [PATCH GSoC v4 3/9] fetch-object-info: pass arguments directly instead of a struct Junio C Hamano
2026-08-06 11:21     ` Karthik Nayak
2026-08-04 18:42   ` [PATCH GSoC v4 4/9] fetch-object-info: use dedicated struct for the results Pablo Sabater
2026-08-04 20:58     ` Junio C Hamano
2026-08-04 21:42       ` Pablo Sabater
2026-08-04 18:42   ` [PATCH GSoC v4 5/9] fetch-object-info: die() on the remaining error path Pablo Sabater
2026-08-04 18:43   ` [PATCH GSoC v4 6/9] protocol-caps: add type support to object-info Pablo Sabater
2026-08-04 18:43   ` [PATCH GSoC v4 7/9] fetch-object-info: parse type from server response Pablo Sabater
2026-08-04 18:43   ` [PATCH GSoC v4 8/9] serve: advertise type capability Pablo Sabater
2026-08-04 18:43   ` [PATCH GSoC v4 9/9] cat-file: unify default format Pablo Sabater
2026-08-06 17:17   ` [PATCH GSoC v4 0/9] cat-file: extend remote-object-info to support %(objecttype) Jeff King
2026-08-07  0:30     ` Pablo Sabater
2026-08-07 23:19       ` Jeff King
2026-08-07 22:06 ` [PATCH GSoC v5 00/10] " Pablo Sabater
2026-08-07 22:06   ` [PATCH GSoC v5 01/10] t5701: use test_file_size() to get the size of a file Pablo Sabater
2026-08-07 22:06   ` [PATCH GSoC v5 02/10] fetch-object-info: detect malformed server responses Pablo Sabater
2026-08-07 22:06   ` [PATCH GSoC v5 03/10] fetch-object-info: pass arguments directly instead of a struct Pablo Sabater
2026-08-07 22:06   ` [PATCH GSoC v5 04/10] fetch-object-info: use dedicated struct for the results Pablo Sabater
2026-08-07 22:07   ` [PATCH GSoC v5 05/10] fetch-object-info: die() on the remaining error path Pablo Sabater
2026-08-07 22:07   ` [PATCH GSoC v5 06/10] transport: drop remote object-info fields from transport struct Pablo Sabater
2026-08-07 22:07   ` [PATCH GSoC v5 07/10] protocol-caps: add type support to object-info Pablo Sabater
2026-08-07 22:07   ` [PATCH GSoC v5 08/10] fetch-object-info: parse type from server response Pablo Sabater
2026-08-07 22:07   ` [PATCH GSoC v5 09/10] serve: advertise type capability Pablo Sabater
2026-08-07 22:07   ` [PATCH GSoC v5 10/10] cat-file: unify default format Pablo Sabater
2026-08-07 23:12   ` [PATCH GSoC v5 00/10] cat-file: extend remote-object-info to support %(objecttype) Pablo Sabater
2026-08-08  0:02 ` [PATCH GSoC v6 " Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 01/10] t5701: use test_file_size() to get the size of a file Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 02/10] fetch-object-info: detect malformed server responses Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 03/10] fetch-object-info: pass arguments directly instead of a struct Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 04/10] fetch-object-info: use dedicated struct for the results Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 05/10] fetch-object-info: die() on the remaining error path Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 06/10] transport: drop remote object-info fields from transport struct Pablo Sabater
2026-08-08 16:21     ` Junio C Hamano
2026-08-08 18:59       ` Chandra Pratap
2026-08-08  0:02   ` [PATCH GSoC v6 07/10] protocol-caps: add type support to object-info Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 08/10] fetch-object-info: parse type from server response Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 09/10] serve: advertise type capability Pablo Sabater
2026-08-08  0:02   ` [PATCH GSoC v6 10/10] cat-file: unify default format Pablo Sabater
2026-08-08  7:41   ` [PATCH GSoC v6 00/10] cat-file: extend remote-object-info to support %(objecttype) Jeff King

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=20260804-objecttype-support-v4-3-31511b0231be@gmail.com \
    --to=pabloosabaterr@gmail.com \
    --cc=chandrapratap3519@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=karthik.188@gmail.com \
    --cc=peff@peff.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.