]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/repo: add object disk size info to structure table
authorJustin Tobler <jltobler@gmail.com>
Wed, 17 Dec 2025 17:54:04 +0000 (11:54 -0600)
committerJunio C Hamano <gitster@pobox.com>
Thu, 18 Dec 2025 00:02:32 +0000 (09:02 +0900)
Similar to a prior commit, update the table output format for the
git-repo(1) structure command to display the total object disk usage by
object type.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/repo.c
t/t1901-repo-structure.sh

index 7ea051f3aff643d24196d3fbe124cf1d6b25936b..09bc8fccfd15b5a8d33b8809c3319e68c17c443b 100644 (file)
@@ -324,6 +324,7 @@ static void stats_table_setup_structure(struct stats_table *table,
        struct ref_stats *refs = &stats->refs;
        size_t inflated_object_total;
        size_t object_count_total;
+       size_t disk_object_total;
        size_t ref_total;
 
        ref_total = get_total_reference_count(refs);
@@ -358,6 +359,18 @@ static void stats_table_setup_structure(struct stats_table *table,
                              "    * %s", _("Blobs"));
        stats_table_size_addf(table, objects->inflated_sizes.tags,
                              "    * %s", _("Tags"));
+
+       disk_object_total = get_total_object_values(&objects->disk_sizes);
+       stats_table_size_addf(table, disk_object_total,
+                             "  * %s", _("Disk size"));
+       stats_table_size_addf(table, objects->disk_sizes.commits,
+                             "    * %s", _("Commits"));
+       stats_table_size_addf(table, objects->disk_sizes.trees,
+                             "    * %s", _("Trees"));
+       stats_table_size_addf(table, objects->disk_sizes.blobs,
+                             "    * %s", _("Blobs"));
+       stats_table_size_addf(table, objects->disk_sizes.tags,
+                             "    * %s", _("Tags"));
 }
 
 static void stats_table_print_structure(const struct stats_table *table)
index dd17caad05da67a62121d21920649831af934502..435fd979fa93b96a9feea9eb8c97e299fc999c97 100755 (executable)
@@ -5,8 +5,20 @@ test_description='test git repo structure'
 . ./test-lib.sh
 
 object_type_disk_usage() {
-       git rev-list --all --objects --disk-usage --filter=object:type=$1 \
-               --filter-provided-objects
+       disk_usage_opt="--disk-usage"
+
+       if test "$2" = "true"
+       then
+               disk_usage_opt="--disk-usage=human"
+       fi
+
+       if test "$1" = "all"
+       then
+               git rev-list --all --objects $disk_usage_opt
+       else
+               git rev-list --all --objects $disk_usage_opt \
+                       --filter=object:type=$1 --filter-provided-objects
+       fi
 }
 
 test_expect_success 'empty repository' '
@@ -35,6 +47,11 @@ test_expect_success 'empty repository' '
                |     * Trees          |    0 B |
                |     * Blobs          |    0 B |
                |     * Tags           |    0 B |
+               |   * Disk size        |    0 B |
+               |     * Commits        |    0 B |
+               |     * Trees          |    0 B |
+               |     * Blobs          |    0 B |
+               |     * Tags           |    0 B |
                EOF
 
                git repo structure >out 2>err &&
@@ -58,7 +75,10 @@ test_expect_success SHA1 'repository with references and objects' '
                # Also creates a commit, tree, and blob.
                git notes add -m foo &&
 
-               cat >expect <<-\EOF &&
+               # The tags disk size is handled specially due to the
+               # git-rev-list(1) --disk-usage=human option printing the full
+               # "byte/bytes" unit string instead of just "B".
+               cat >expect <<-EOF &&
                | Repository structure | Value      |
                | -------------------- | ---------- |
                | * References         |            |
@@ -79,6 +99,11 @@ test_expect_success SHA1 'repository with references and objects' '
                |     * Trees          |  15.81 MiB |
                |     * Blobs          |  11.68 KiB |
                |     * Tags           |    132 B   |
+               |   * Disk size        | $(object_type_disk_usage all true) |
+               |     * Commits        | $(object_type_disk_usage commit true) |
+               |     * Trees          | $(object_type_disk_usage tree true) |
+               |     * Blobs          |  $(object_type_disk_usage blob true) |
+               |     * Tags           |    $(object_type_disk_usage tag) B   |
                EOF
 
                git repo structure >out 2>err &&