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 }