[PATCH v2 0/6] builtin/repo: introduce stats subcommand
- From
Justin Tobler <jltobler@gmail.com>
- Date
- Sep 24, 2025, 21:24 UTC
- Message-ID
- <20250924212426.2930029-1-jltobler@gmail.com>
- In-Reply-To
- <20250923025700.3046260-1-jltobler@gmail.com>
Greetings,
The shape of a repository's history can have huge impacts on the performance and health of the repository itself. Currently, Git lacks a means to surface key stats/information regarding the shape of a repository via a single command. Acquiring this information requires users to be fairly knowledgeable about the structure of a Git repository and how to identify the relevant data points. To fill this gap, supplemental tools such as git-sizer(1) have been developed.
To allow users to more readily identify potential issues for a repository, introduce the "stats" subcommand in git-repo(1) to output stats for the repository that may be of interest to users. The goal of this subcommand is to eventually provide similar functionality to git-sizer(1), but in Git natively.
In this initial version, the "stats" subcommand only surfaces counts of the various reference and object types in a repository. In a follow-up series, I would like to introduce additional data points that are present in git-sizer(1) such as largest objects, combined object sizes by type, and other general repository shape information.
Some other general features that would be nice to introduce eventually:
- A "level of concern" meter for reported stats. This could indicate to users which stats may be worth looking into further. - Links to OIDs of interesting objects that correspond to certain stats. - Options to limit which references to use when evaluating the repository.
Changes since V1:
- Translatable terms displayed in the table have formatting separated out. - Squashed the `keyvalue` and `nul` output format patches into one. - Added a progress meter to provide users with more feedback. - Updated docs to outline to outline reported data in a bulleted list. - Combined similar tests together to reduce repetitive setup. - Added patch to improve ref-filter interface so we don't have to create a dummy patterns array. - Many other renames and cleanups to improve patch clarity.
Thanks, -Justin
Justin Tobler (6): builtin/repo: rename repo_info() to cmd_repo_info() ref-filter: allow NULL filter pattern builtin/repo: introduce stats subcommand builtin/repo: add object counts in stats output builtin/repo: add keyvalue and nul format for stats builtin/repo: add progress meter for stats
Documentation/git-repo.adoc | 30 +++ builtin/repo.c | 354 +++++++++++++++++++++++++++++++++++- ref-filter.c | 4 +- t/meson.build | 1 + t/t1901-repo-stats.sh | 109 +++++++++++ 5 files changed, 493 insertions(+), 5 deletions(-) create mode 100755 t/t1901-repo-stats.sh
base-commit: ca2559c1d630eb4f04cdee2328aaf1c768907a9e
-- 2.51.0.193.g4975ec3473b