Re: [PATCH GSoC v4 4/9] fetch-object-info: use dedicated struct for the results
"Pablo Sabater" <[email protected]> Tue, 04 Aug 2026 23:42:04 +0200
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <[email protected]> |
On Tue Aug 4, 2026 at 10:58 PM CEST, Junio C Hamano wrote: > Pablo Sabater <[email protected]> writes: > >> builtin/cat-file.c | 59 +++++++++----------------------------- >> fetch-object-info.c | 81 ++++++++++++++++++++++++++--------------------------- >> fetch-object-info.h | 27 +++++++++++++----- >> object-file.c | 10 ------- >> odb.h | 3 -- >> transport.c | 3 +- >> transport.h | 5 ++-- >> 7 files changed, 77 insertions(+), 111 deletions(-) > > We lost ~30 lines mostly thanks to losing an intermediate structure > and need to flip pointer members in it to point at heap allocated > locations? Yes, also contributes that the logic that filtered the allow-list is dropped, and compared to the previous version, no type logic is in this patch. > >> -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. >> - */ >> -}; > > Hmph, it would not make any difference in the final result, as we > are losing protocol_placeholder_entry and this list of atoms, but > I am somewhat confused. Why we already had "type" here, even > though we are adding support for it much later in the series (and > unlike the previous iteration, this iteration did not do the > ask/want_type thing in the previous step)? The list was designed so even if new placeholder were added, it would be idemp. because nothing would happen until a server did advertise that attribute; that's why there's no change in behavior. It was there because it was interesting for the tests. A known placeholder but unsupported in the server still outputs an empty string (this would be the case of: new client vs old server). This way we had tested: unknown + unsupported as %(deltabase) is. known + unsupported as %(objecttype) was. (that's why it's on the list) knwon + supported as %(objectsize) is. Using object_info and the list made sense because object_info already had a type field, so listing type cost nothing. Now that we have to dedicate an array per attribute it would mean carrying a types array that nobody fills, so I preferred to drop it here and implement type fully later. Hope this makes sense, Pablo