git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 0/3] cat-file: add %(objectmode) and submodule message to batch commands

From
Victoria Dye via GitGitGadget <gitgitgadget@gmail.com>
Date
Jun 2, 2025, 18:55 UTC
Message-ID
<pull.1929.git.1748890555.gitgitgadget@gmail.com>

This series re-attempts the changes proposed last year [1] for extending the information about tree entries available from the 'cat-file' batch format commands. It also (hopefully) addresses the initial round of feedback that series received.

The first patch updates 't1006-cat-file.sh' to test non-OID object specifications. In response to the feedback in [2], I added more careful quoting and a couple tests using paths with spaces. This change revealed a (likely known) limitation of the '%(rest)' atom when processing object names with spaces. To make that limitation explicit, I marked the relevant test as expected to fail.

The second patch adds "mode" support. This is essentially unchanged from its initial submission, save for some conflict resolution in the test script.

The final patch takes a different approach to submodule resolution than the initial submission; rather than treat the entry as a "regular" commit object with empty content, we now print an error message similar to the "missing", "ambiguous", etc. cases, but with the tree entry's OID rather than the input object name.

As for the motivation behind the change (re: [3]), the goal of this series is to be able to get more of the information available internally about an object in 'cat-file --batch[*]' -- in the case of a tree entry, the main things missing were the file mode and the presence (and OID) of submodule pointers. As Junio mentioned in [4], using a single long-running process to resolve objects is far more performant than spawning multiple processes to resolve tree entries with something like 'ls-tree', especially when resolving entries across multiple trees or resolving a mix of tree entries and OIDs, refnames, etc. The object resolution logic in 'cat-file' meant that the mode & submodule OID information were already (mostly) available, but we didn't have a way to output it.

The intent of this series is to make the new format options/outputs to get those fields as unobtrusive as possible, but I'm happy to do something more like the previous series if that would be preferable.

[1] https://lore.kernel.org/git/pull.1689.git.1710183362.gitgitgadget@gmail.com/ [2] https://lore.kernel.org/git/xmqqle6oo2ns.fsf@gitster.g/ [3] https://lore.kernel.org/git/20240312221758.GA109417@coredump.intra.peff.net/ [4] https://lore.kernel.org/git/xmqq1q8fl05r.fsf@gitster.g/

Victoria Dye (3):
  t1006: update 'run_tests' to test generic object specifiers
  cat-file: add %(objectmode) atom
  cat-file.c: add batch handling for submodules
 Documentation/git-cat-file.adoc |  13 ++++
 builtin/cat-file.c              |  14 +++-
 t/t1006-cat-file.sh             | 111 +++++++++++++++++++++++---------
 3 files changed, 103 insertions(+), 35 deletions(-)
base-commit: 7014b55638da979331baf8dc31c4e1d697cf2d67
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1929%2Fvdye%2Fvdye%2Fcat-file-mode-submodule-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1929/vdye/vdye/cat-file-mode-submodule-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1929
-- 
gitgitgadget
Next: Victoria Dye via GitGitGadget
Message 1 of 10 in “cat-file: add %(objectmode) and submodule message to batch commands”
  1. 0/3 cat-file: add %(objectmode) and submodule message to batch commandsVictoria Dye via GitGitGadget, Jun 2, 2025
  2. 1/3 t1006: update 'run_tests' to test generic object specifiersVictoria Dye via GitGitGadget, Jun 2, 2025
  3. 2/3 cat-file: add %(objectmode) atomVictoria Dye via GitGitGadget, Jun 2, 2025
  4. Jeff KingJun 4, 2025
  5. 3/3 cat-file.c: add batch handling for submodulesVictoria Dye via GitGitGadget, Jun 2, 2025
  6. Jeff KingJun 4, 2025
  7. Victoria DyeJun 5, 2025
  8. Jeff KingJun 5, 2025
  9. Junio C HamanoJun 4, 2025
  10. Jeff KingJun 4, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.