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

Re: [PATCH 1/5] builtin/repo: update stats for each object

From
Justin Tobler <jltobler@gmail.com>
Date
Feb 18, 2026, 19:40 UTC
Message-ID
<aZYUwjSEAcGRSXNa@denethor>
In-Reply-To
<xmqqzf5pqwtm.fsf@gitster.g>
On 26/02/03 02:36PM, Junio C Hamano wrote:
Show 67 quoted lines
> 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
Previous: Patrick SteinhardtNext: Justin Tobler
Message 16 of 50 in “builtin/repo: include largest object information”
  1. 0/5 builtin/repo: include largest object informationJustin Tobler, Feb 3, 2026
  2. 1/5 builtin/repo: update stats for each objectJustin Tobler, Feb 3, 2026
  3. 2/5 builtin/repo: collect largest inflated objectsJustin Tobler, Feb 3, 2026
  4. 3/5 builtin/repo: add OID annotations to table outputJustin Tobler, Feb 3, 2026
  5. 4/5 builtin/repo: find commit with most parentsJustin Tobler, Feb 3, 2026
  6. 5/5 builtin/repo: find tree with most entriesJustin Tobler, Feb 3, 2026
  7. Junio C HamanoFeb 3, 2026
  8. Junio C HamanoFeb 3, 2026
  9. Junio C HamanoFeb 3, 2026
  10. Junio C HamanoFeb 3, 2026
  11. Kristoffer HaugsbakkFeb 3, 2026
  12. Junio C HamanoFeb 3, 2026
  13. Patrick SteinhardtFeb 4, 2026
  14. Junio C HamanoFeb 4, 2026
  15. Patrick SteinhardtFeb 13, 2026
  16. Justin ToblerFeb 18, 2026
  17. Justin ToblerFeb 18, 2026
  18. Justin ToblerFeb 18, 2026
  19. Justin ToblerFeb 18, 2026
  20. 0/5 builtin/repo: include largest object informationJustin Tobler, Feb 23, 2026
  21. 1/5 builtin/repo: update stats for each objectJustin Tobler, Feb 23, 2026
  22. 2/5 builtin/repo: collect largest inflated objectsJustin Tobler, Feb 23, 2026
  23. 3/5 builtin/repo: add OID annotations to table outputJustin Tobler, Feb 23, 2026
  24. 4/5 builtin/repo: find commit with most parentsJustin Tobler, Feb 23, 2026
  25. 5/5 builtin/repo: find tree with most entriesJustin Tobler, Feb 23, 2026
  26. Patrick SteinhardtFeb 24, 2026
  27. Junio C HamanoFeb 26, 2026
  28. Justin ToblerFeb 26, 2026
  29. Junio C HamanoFeb 26, 2026
  30. Junio C HamanoFeb 26, 2026
  31. Lucas Seiki OshiroFeb 28, 2026
  32. Lucas Seiki OshiroFeb 28, 2026
  33. Justin ToblerMar 1, 2026
  34. Justin ToblerMar 2, 2026
  35. Justin ToblerMar 2, 2026
  36. Justin ToblerMar 2, 2026
  37. 0/6 builtin/repo: include largest object informationJustin Tobler, Mar 2, 2026
  38. 1/6 builtin/repo: update stats for each objectJustin Tobler, Mar 2, 2026
  39. 2/6 builtin/repo: add helper for printing keyvalue outputJustin Tobler, Mar 2, 2026
  40. 3/6 builtin/repo: collect largest inflated objectsJustin Tobler, Mar 2, 2026
  41. 4/6 builtin/repo: add OID annotations to table outputJustin Tobler, Mar 2, 2026
  42. 5/6 builtin/repo: find commit with most parentsJustin Tobler, Mar 2, 2026
  43. 6/6 builtin/repo: find tree with most entriesJustin Tobler, Mar 2, 2026
  44. Junio C HamanoMar 2, 2026
  45. Patrick SteinhardtMar 3, 2026
  46. Patrick SteinhardtMar 3, 2026
  47. Junio C HamanoMar 3, 2026
  48. Justin ToblerMar 3, 2026
  49. Junio C HamanoMar 6, 2026
  50. Justin ToblerMar 8, 2026

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.