Subject: [PATCH v2 0/5] builtin/repo: include largest object information

From: Justin Tobler <[email-masked]>
Date: Mon, 23 Feb 2026 11:41:15 -0600

Greetings,

The "structure" output for git-repo(1) currently provides count
information for references/objects as well as total inflated/disk sizes
of objects by type. Info regarding the largest individual objects in the
repository is not yet collected, but would be useful to users wishing to
identify such large objects.

This patch series adds the following data points:
- The OID and size of the largest objects by object type
- The OID and parent count of the commit with the most parents
- The OID and entries count of the tree with the most entries

Changes from V1:

- Avoided duplicating the annotation string by handing over ownership.
- I decided to leave the `struct object_stats` structure alone for now
  as storing the various object values per-type does make it convenient
  to calulate the various totals. I may revisit this in a future series
  though.

Thanks,
-Justin

Justin Tobler (5):
  builtin/repo: update stats for each object
  builtin/repo: collect largest inflated objects
  builtin/repo: add OID annotations to table output
  builtin/repo: find commit with most parents
  builtin/repo: find tree with most entries

 Documentation/git-repo.adoc |   1 +
 builtin/repo.c              | 249 +++++++++++++++++++++++++++++++-----
 t/t1901-repo-structure.sh   | 143 +++++++++++++--------
 3 files changed, 313 insertions(+), 80 deletions(-)

Range-diff against v1:
1:  94a44e0e0f = 1:  94a44e0e0f builtin/repo: update stats for each object
2:  92dbf34f2c = 2:  92dbf34f2c builtin/repo: collect largest inflated objects
3:  1811d03afe ! 3:  1457d5d59c builtin/repo: add OID annotations to table output
    @@ builtin/repo.c: static void stats_table_vaddf(struct stats_table *table,
     +		entry->index = table->annotations.nr + 1;
     +		strbuf_addf(&buf, "[%" PRIuMAX "] %s", (uintmax_t)entry->index,
     +			    oid_to_hex(entry->oid));
    -+		string_list_append(&table->annotations, buf.buf);
    ++		string_list_append_nodup(&table->annotations, strbuf_detach(&buf, NULL));
     +	}
      	if (entry->value) {
      		int value_width = utf8_strwidth(entry->value);
4:  471d352cc1 = 4:  f4e92e3f09 builtin/repo: find commit with most parents
5:  7f1b7f9657 = 5:  af404fcc6c builtin/repo: find tree with most entries

base-commit: 67ad42147a7acc2af6074753ebd03d904476118f
-- 
2.53.0