[PATCH GSoC v15 00/13] cat-file: add remote-object-info to batch-command
- From
Pablo Sabater <pabloosabaterr@gmail.com>
- Date
- Jul 1, 2026, 12:18 UTC
- Message-ID
- <20260701-ps-eric-work-rebase-v15-0-c88a43b63917@gmail.com>
- In-Reply-To
- <20260625-ps-eric-work-rebase-v14-0-09f7ffe21a53@gmail.com>
This patch series is a continuation of Eric Ju's (eric.peijian@gmail.com) and Calvin Wan's (calvinwan@google.com) patch series [1] and [2] respectively.
Sometimes it is beneficial to retrieve information about an object without having to download it completely. The server logic for retrieving size has already been implemented and merged in "a2ba162cda (object-info: support for retrieving object info, 2021-04-20)"[3]. This patch series implement the client option for it.
Eric's series adds the `remote-object-info` command to `cat-file --batch-command`. This command allows the client to make an object-info command request to a server that supports protocol v2.
If the server uses protocol v2 but does not support the object-info capability, `cat-file --batch-command` will die.
If a user attempts to use `remote-object-info` with protocol v1, `cat-file --batch-command` will die.
Currently, only the size (%(objectsize)) is supported end to end in this implementation. The type (%(objecttype)) is known by the client's allow-list and request path but is not supported on the server side nor the response parsing. A follow up series will add full end-to-end support for %(objecttype).
The default format for remote-object-info is set to %(objectname) %(objectsize). Once %(objecttype) is supported, the default format will be unified accordingly.
If the batch command format includes unsupported fields such as %(objecttype), %(objectsize:disk), or %(deltabase), the command will return empty strings for each unsupported field.
This series completes Eric's work mainly with the refactor of the validation of the placeholder with an allow-list that filters what the client asks with what the server is capable of provide following Jeff King's idea [4].
GitHub CI: https://github.com/pabloosabaterr/git/actions/runs/28435046129
[1]: https://lore.kernel.org/git/20250221190451.12536-1-eric.peijian@gmail.com/ [2]: https://lore.kernel.org/git/20220728230210.2952731-1-calvinwan@google.com/#t [3]: https://git.kernel.org/pub/scm/git/git.git/commit/?id=a2ba162cda2acc171c3e36acbbc854792b093cb7 [4]: https://lore.kernel.org/git/20250313060250.GH94015@coredump.intra.peff.net/
Changes since v14: - Changed strtou_szt to be strtoumax_szt so there are no problems between `size_t` and `unsigned long`. - Reworded commits to be more consistent and clear. - gitprotocol-v2.adoc documentation is now being modified on commit [9/13]. - Added BUG() calls on [10/13]. - style and nits fixes.
Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
---
Calvin Wan (3):
fetch-pack: move fetch initialization
serve: advertise object-info feature
transport: add client support for object-infoEric Ju (4):
git-compat-util: add `strtoumax_szt()` with error handling
cat-file: declare loop counter inside for()
t1006: split test utility functions into new 'lib-cat-file.sh'
cat-file: add remote-object-info to batch-commandPablo Sabater (6):
transport-helper: fix memory leak of helper on disconnect
fetch-pack: drop static `advertise_sid` variable
fetch-pack: move `write_fetch_command_and_capabilities()` to connect.c
connect: make `write_fetch_command_and_capabilities()` more generic
cat-file: validate remote atoms with an allow-list
cat-file: make remote-object-info allow-list dynamicDocumentation/git-cat-file.adoc | 29 +- Documentation/gitprotocol-v2.adoc | 11 +- Makefile | 1 + builtin/cat-file.c | 221 ++++++++++- connect.c | 34 ++ connect.h | 8 + fetch-object-info.c | 115 ++++++ fetch-object-info.h | 22 ++ fetch-pack.c | 48 +-- fetch-pack.h | 1 + git-compat-util.h | 20 + meson.build | 1 + object-file.c | 10 + odb.h | 3 + serve.c | 5 +- t/lib-cat-file.sh | 16 + t/meson.build | 1 + t/t1006-cat-file.sh | 13 +- t/t1017-cat-file-remote-object-info.sh | 699 +++++++++++++++++++++++++++++++++ transport-helper.c | 15 +- transport-internal.h | 8 + transport.c | 46 +++ transport.h | 10 + 23 files changed, 1257 insertions(+), 80 deletions(-) --- base-commit: e9019fcafe0040228b8631c30f97ae1adb61bcdc change-id: 20260608-ps-eric-work-rebase-b73ae84ba671
Best regards, -- Pablo Sabater <pabloosabaterr@gmail.com>