From: Justin Tobler <jltobler@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 1/5] builtin/repo: update stats for each object
Date: Wed, 18 Feb 2026 13:40:21 -0600 [thread overview]
Message-ID: <aZYUwjSEAcGRSXNa@denethor> (raw)
In-Reply-To: <xmqqzf5pqwtm.fsf@gitster.g>
On 26/02/03 02:36PM, Junio C Hamano wrote:
> Justin Tobler <jltobler@gmail.com> writes:
>
> > + switch (type) {
> > + case OBJ_TAG:
> > + stats->type_counts.tags++;
> > + stats->inflated_sizes.tags += inflated;
> > + stats->disk_sizes.tags += disk;
> > + break;
> > + case OBJ_COMMIT:
> > + stats->type_counts.commits++;
> > + stats->inflated_sizes.commits += inflated;
> > + stats->disk_sizes.commits += disk;
> > + break;
> > + case OBJ_TREE:
> > + stats->type_counts.trees++;
> > + stats->inflated_sizes.trees += inflated;
> > + stats->disk_sizes.trees += disk;
> > + break;
> > + case OBJ_BLOB:
> > + stats->type_counts.blobs++;
> > + stats->inflated_sizes.blobs += inflated;
> > + stats->disk_sizes.blobs += disk;
> > + break;
> > + default:
> > + BUG("invalid object type");
> > + }
> > }
>
> The repetition above makes me wonder if it might be a better
> organization to have
>
> struct object_stat {
> struct type_stat {
> size_t count;
> size_t inflated_size;
> size_t disk_size;
> } tag, commit, tree, blob;
> ... possibly other members ...
> } *stats;
>
> or even
>
> struct object_stat {
> struct type_stat {
> size_t count;
> size_t inflated_size;
> size_t disk_size;
> } t[4];
> ... possibly other members ...
> };
>
> and have this part of the code be
>
> struct type_stat *t;
>
> if (OBJ_COMMIT <= type && type <= OBJ_TAG)
> t = stats->t[type - 1];
> else
> BUG("invalid object type");
>
> t->count++;
> t->inflated_size += inflated;
> t->disk_size += disk;
>
> but that is probably only because I am looking at this part of the
> code. Other parts of the code may have good reasons to have the
> structure nested the other way around like you have.
Good suggestion. Some of the info added in the following commits is
object specific and will need to be handled accordinly, but we could
probably still benefit by structuring the data a bit better. Will
explore in the next version.
-Justin
next prev parent reply other threads:[~2026-02-18 19:40 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-03 22:17 [PATCH 0/5] builtin/repo: include largest object information Justin Tobler
2026-02-03 22:17 ` [PATCH 1/5] builtin/repo: update stats for each object Justin Tobler
2026-02-03 22:36 ` Junio C Hamano
2026-02-18 19:40 ` Justin Tobler [this message]
2026-02-26 19:20 ` Junio C Hamano
2026-02-26 19:29 ` Justin Tobler
2026-02-03 22:17 ` [PATCH 2/5] builtin/repo: collect largest inflated objects Justin Tobler
2026-02-03 22:45 ` Junio C Hamano
2026-02-18 20:01 ` Justin Tobler
2026-02-03 22:17 ` [PATCH 3/5] builtin/repo: add OID annotations to table output Justin Tobler
2026-02-13 13:14 ` Patrick Steinhardt
2026-02-18 20:13 ` Justin Tobler
2026-02-03 22:17 ` [PATCH 4/5] builtin/repo: find commit with most parents Justin Tobler
2026-02-03 22:48 ` Junio C Hamano
2026-02-03 23:14 ` Kristoffer Haugsbakk
2026-02-03 23:33 ` Junio C Hamano
2026-02-18 20:06 ` Justin Tobler
2026-02-03 22:17 ` [PATCH 5/5] builtin/repo: find tree with most entries Justin Tobler
2026-02-03 22:50 ` Junio C Hamano
2026-02-04 8:28 ` Patrick Steinhardt
2026-02-04 15:28 ` Junio C Hamano
2026-02-23 17:41 ` [PATCH v2 0/5] builtin/repo: include largest object information Justin Tobler
2026-02-23 17:41 ` [PATCH v2 1/5] builtin/repo: update stats for each object Justin Tobler
2026-02-23 17:41 ` [PATCH v2 2/5] builtin/repo: collect largest inflated objects Justin Tobler
2026-02-26 19:50 ` Junio C Hamano
2026-03-02 17:28 ` Justin Tobler
2026-02-28 23:36 ` Lucas Seiki Oshiro
2026-03-02 17:38 ` Justin Tobler
2026-02-23 17:41 ` [PATCH v2 3/5] builtin/repo: add OID annotations to table output Justin Tobler
2026-02-26 19:56 ` Junio C Hamano
2026-03-02 17:39 ` Justin Tobler
2026-02-23 17:41 ` [PATCH v2 4/5] builtin/repo: find commit with most parents Justin Tobler
2026-02-23 17:41 ` [PATCH v2 5/5] builtin/repo: find tree with most entries Justin Tobler
2026-02-24 9:35 ` [PATCH v2 0/5] builtin/repo: include largest object information Patrick Steinhardt
2026-02-28 23:43 ` Lucas Seiki Oshiro
2026-03-01 19:22 ` Justin Tobler
2026-03-02 21:45 ` [PATCH v3 0/6] " Justin Tobler
2026-03-02 21:45 ` [PATCH v3 1/6] builtin/repo: update stats for each object Justin Tobler
2026-03-02 21:45 ` [PATCH v3 2/6] builtin/repo: add helper for printing keyvalue output Justin Tobler
2026-03-03 13:27 ` Patrick Steinhardt
2026-03-03 17:40 ` Junio C Hamano
2026-03-03 18:08 ` Justin Tobler
2026-03-02 21:45 ` [PATCH v3 3/6] builtin/repo: collect largest inflated objects Justin Tobler
2026-03-03 13:27 ` Patrick Steinhardt
2026-03-02 21:45 ` [PATCH v3 4/6] builtin/repo: add OID annotations to table output Justin Tobler
2026-03-02 21:45 ` [PATCH v3 5/6] builtin/repo: find commit with most parents Justin Tobler
2026-03-02 21:45 ` [PATCH v3 6/6] builtin/repo: find tree with most entries Justin Tobler
2026-03-02 22:09 ` [PATCH v3 0/6] builtin/repo: include largest object information Junio C Hamano
2026-03-06 22:36 ` Junio C Hamano
2026-03-08 18:44 ` Justin Tobler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aZYUwjSEAcGRSXNa@denethor \
--to=jltobler@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox