builtin/repo: add helper for printing keyvalue output
The machine-parsable formats for the git-repo(1) "structure" subcommand print output in keyvalue pairs. Introduce the helper function `print_keyvalue()` to remove some code duplication and improve readability. Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Justin Tobler committed
Mar 2, 2026 at 15:45 UTC
fa1752792711e7383376cf232eb72aac77d726d7
1 file changed
+42
-35
builtin/repo.c
+42
-35
@@ -446,44 +446,51 @@ static void stats_table_clear(struct stats_table *table)
446
string_list_clear(&table->rows, 1);
447
}
448
449
+static inline void print_keyvalue(const char *key, char key_delim, size_t value,
450
+ char value_delim)
451
+{
452
+ printf("%s%c%" PRIuMAX "%c", key, key_delim, (uintmax_t)value,
453
+ value_delim);
454
+}
455
+
456
static void structure_keyvalue_print(struct repo_structure *stats,
457
char key_delim, char value_delim)
458
{
452
- printf("references.branches.count%c%" PRIuMAX "%c", key_delim,
453
- (uintmax_t)stats->refs.branches, value_delim);
454
- printf("references.tags.count%c%" PRIuMAX "%c", key_delim,
455
- (uintmax_t)stats->refs.tags, value_delim);
456
- printf("references.remotes.count%c%" PRIuMAX "%c", key_delim,
457
- (uintmax_t)stats->refs.remotes, value_delim);
458
- printf("references.others.count%c%" PRIuMAX "%c", key_delim,
459
- (uintmax_t)stats->refs.others, value_delim);
460
-
461
- printf("objects.commits.count%c%" PRIuMAX "%c", key_delim,
462
- (uintmax_t)stats->objects.type_counts.commits, value_delim);
463
- printf("objects.trees.count%c%" PRIuMAX "%c", key_delim,
464
- (uintmax_t)stats->objects.type_counts.trees, value_delim);
465
- printf("objects.blobs.count%c%" PRIuMAX "%c", key_delim,
466
- (uintmax_t)stats->objects.type_counts.blobs, value_delim);
467
- printf("objects.tags.count%c%" PRIuMAX "%c", key_delim,
468
- (uintmax_t)stats->objects.type_counts.tags, value_delim);
469
-
470
- printf("objects.commits.inflated_size%c%" PRIuMAX "%c", key_delim,
471
- (uintmax_t)stats->objects.inflated_sizes.commits, value_delim);
472
- printf("objects.trees.inflated_size%c%" PRIuMAX "%c", key_delim,
473
- (uintmax_t)stats->objects.inflated_sizes.trees, value_delim);
474
- printf("objects.blobs.inflated_size%c%" PRIuMAX "%c", key_delim,
475
- (uintmax_t)stats->objects.inflated_sizes.blobs, value_delim);
476
- printf("objects.tags.inflated_size%c%" PRIuMAX "%c", key_delim,
477
- (uintmax_t)stats->objects.inflated_sizes.tags, value_delim);
478
-
479
- printf("objects.commits.disk_size%c%" PRIuMAX "%c", key_delim,
480
- (uintmax_t)stats->objects.disk_sizes.commits, value_delim);
481
- printf("objects.trees.disk_size%c%" PRIuMAX "%c", key_delim,
482
- (uintmax_t)stats->objects.disk_sizes.trees, value_delim);
483
- printf("objects.blobs.disk_size%c%" PRIuMAX "%c", key_delim,
484
- (uintmax_t)stats->objects.disk_sizes.blobs, value_delim);
485
- printf("objects.tags.disk_size%c%" PRIuMAX "%c", key_delim,
486
- (uintmax_t)stats->objects.disk_sizes.tags, value_delim);
459
+ print_keyvalue("references.branches.count", key_delim,
460
+ stats->refs.branches, value_delim);
461
+ print_keyvalue("references.tags.count", key_delim,
462
+ stats->refs.tags, value_delim);
463
+ print_keyvalue("references.remotes.count", key_delim,
464
+ stats->refs.remotes, value_delim);
465
+ print_keyvalue("references.others.count", key_delim,
466
+ stats->refs.others, value_delim);
467
+
468
+ print_keyvalue("objects.commits.count", key_delim,
469
+ stats->objects.type_counts.commits, value_delim);
470
+ print_keyvalue("objects.trees.count", key_delim,
471
+ stats->objects.type_counts.trees, value_delim);
472
+ print_keyvalue("objects.blobs.count", key_delim,
473
+ stats->objects.type_counts.blobs, value_delim);
474
+ print_keyvalue("objects.tags.count", key_delim,
475
+ stats->objects.type_counts.tags, value_delim);
476
+
477
+ print_keyvalue("objects.commits.inflated_size", key_delim,
478
+ stats->objects.inflated_sizes.commits, value_delim);
479
+ print_keyvalue("objects.trees.inflated_size", key_delim,
480
+ stats->objects.inflated_sizes.trees, value_delim);
481
+ print_keyvalue("objects.blobs.inflated_size", key_delim,
482
+ stats->objects.inflated_sizes.blobs, value_delim);
483
+ print_keyvalue("objects.tags.inflated_size", key_delim,
484
+ stats->objects.inflated_sizes.tags, value_delim);
485
+
486
+ print_keyvalue("objects.commits.disk_size", key_delim,
487
+ stats->objects.disk_sizes.commits, value_delim);
488
+ print_keyvalue("objects.trees.disk_size", key_delim,
489
+ stats->objects.disk_sizes.trees, value_delim);
490
+ print_keyvalue("objects.blobs.disk_size", key_delim,
491
+ stats->objects.disk_sizes.blobs, value_delim);
492
+ print_keyvalue("objects.tags.disk_size", key_delim,
493
+ stats->objects.disk_sizes.tags, value_delim);
494
495
fflush(stdout);
496
}