From: "Pablo Sabater" <pabloosabaterr@gmail.com>
To: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>
Cc: "Pablo Sabater" <pabloosabaterr@gmail.com>, <git@vger.kernel.org>,
<chandrapratap3519@gmail.com>, <karthik.188@gmail.com>
Subject: Re: [PATCH GSoC v2 4/6] fetch-object-info: parse type from server response
Date: Sun, 02 Aug 2026 14:33:49 +0200 [thread overview]
Message-ID: <DKEGM4BYZ4UW.UVJ1H8IGVF0Q@gmail.com> (raw)
In-Reply-To: <xmqqpl015lfl.fsf@gitster.g>
On Sun Aug 2, 2026 at 4:02 AM CEST, Junio C Hamano wrote:
> Jeff King <peff@peff.net> writes:
>
>> And I guess that's what started this conversation. The fundamental
>> difference is asking about one object (and using pointers to tell where
>> to put the answer) versus asking about N.
>
> Thanks for framing the trouble I had so cleanly. Yes.
>
> The origin of the pointer pattern you mentioned, 9a49059022
> (sha1_object_info_extended(): expose a bit more info, 2011-05-12),
> designed the object_info structure to be passed as a set of extended
> parameters to sha1_object_info_extended().
>
> Instead of passing 'size_t *size_p' (which can be NULL) as a
> parameter to signal that (1) if NULL we are not interested in the
> value, and (2) if not NULL, that is where you are expected to write
> the answer, and having to keep adding such a pointer parameter
> every time we need to optionally ask the function for a different
> aspect of the object, it defined the function to take an object_info
> structure to allow us to add new members to the struct as the set
> of queries grows without having to change the function signature.
>
> As a set of extended parameters, of course, it was natural for the
> caller's variables that receive the answers to be pointed to by
> members in the struct. So the pointers in the struct are
> justifiable, but strictly as parameters to the function.
>
> The troubling thing I saw in the patch (and I suspect it was not a
> problem introduced in this series, but by earlier changes that added
> other kinds of fields) is exactly as you identified.
>
> The pointers in this struct were meant to point at real variables or
> structure members that receive values from the function, and were
> never meant to be the final structure that receives and retains
> returned values. If we need 5 calls to the function, we either:
>
> (1) Have a single object_info, and a set of local variables that
> are pointed at by the members of the object_info structure, and
> have a loop that runs 5 times where each iteration calls the
> function to store the returned values in local variables and
> consumes them, i.e.
>
> struct oid oid[5];
> struct object_info oi;
> for (int i = 0; i < 5; i++) {
> size_t size;
> enum object_type type;
> oi.size_p = &size;
> oi.type_p = &type;
> object_info_extended(oid[i], &oi);
> ... use 'size' and 'type' here ...
> }
>
> if you can consume and forget about the object in each
> iteration, or
>
> (2) Have a single object_info, and 5 sets of local variables. A
> loop runs 5 times; in the nth iteration of the loop,
> object_info points at the nth set of local variables and the
> function is called. After the loop runs, we have 5 sets of
> local variables populated and we use them, i.e.
>
> struct oid oid[5];
> struct { size_t size; enum object_type type; } trait[5];
> struct object_info oi;
> for (int i = 0; i < 5; i++) {
> oi.size_p = &trait[i].size;
> oi.type_p = &trait[i].type;
> object_info_extended(oid[i], &oi);
> }
> ... now you have 'size' and 'type' for all these 5 objects ...
>
> if you have to return all 5 results to your caller.
>
> In either case, you do not need more than one object_info
> structure. Having an array of object_info structures was what
> looked so weird to me.
>
>
> Thanks.
Thanks, I think I got it.
I have the doubt of whether this change is desired for this series as
prep or if I should keep on and later make a cleanup series as this
doesn't make a change for a user.
What I understood is that fetch_object_info shouldn't use object_info to
store the results, because it doesn't call read_object_info() like other
commands like 'info' do. Then, it should use its own data structure to
hold the results with flags like wants_size and wants_type. Something
like:
struct object_info_results {
enum object_type *types;
size_t *sizes;
unsigned *unrecognized;
size_t nr;
unsigned wants_size:1;
unsigned wants_type:1;
};
All three of the pointers are nr long.
This could be done in two patches, as I was going to do a prep to
prepare the current code (size only) and this patch would add type for
fetch_object_info().
At the start I read this:
> It could be something we may want to
> clean-up much later after all the dust settles from this year's
> GSoC. I dunno.
So I'm a bit lost about what to do, I'm happy to make that in this
series or as a cleanup series later after GSoC which ends in a couple
weeks.
Whatever is preferred.
Thanks,
Pablo
next prev parent reply other threads:[~2026-08-02 12:33 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 [this message]
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 ` [PATCH GSoC v4 3/9] fetch-object-info: pass arguments directly instead of a struct Pablo Sabater
2026-08-04 20:44 ` 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=DKEGM4BYZ4UW.UVJ1H8IGVF0Q@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.