aboutsummaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
Diffstat (limited to 'builtin')
-rw-r--r--builtin/repo.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/builtin/repo.c b/builtin/repo.c
index 67d7548b88..7ea051f3af 100644
--- a/builtin/repo.c
+++ b/builtin/repo.c
@@ -214,6 +214,7 @@ struct object_values {
struct object_stats {
struct object_values type_counts;
struct object_values inflated_sizes;
+ struct object_values disk_sizes;
};
struct repo_structure {
@@ -462,6 +463,15 @@ static void structure_keyvalue_print(struct repo_structure *stats,
printf("objects.tags.inflated_size%c%" PRIuMAX "%c", key_delim,
(uintmax_t)stats->objects.inflated_sizes.tags, value_delim);
+ printf("objects.commits.disk_size%c%" PRIuMAX "%c", key_delim,
+ (uintmax_t)stats->objects.disk_sizes.commits, value_delim);
+ printf("objects.trees.disk_size%c%" PRIuMAX "%c", key_delim,
+ (uintmax_t)stats->objects.disk_sizes.trees, value_delim);
+ printf("objects.blobs.disk_size%c%" PRIuMAX "%c", key_delim,
+ (uintmax_t)stats->objects.disk_sizes.blobs, value_delim);
+ printf("objects.tags.disk_size%c%" PRIuMAX "%c", key_delim,
+ (uintmax_t)stats->objects.disk_sizes.tags, value_delim);
+
fflush(stdout);
}
@@ -536,13 +546,16 @@ static int count_objects(const char *path UNUSED, struct oid_array *oids,
struct count_objects_data *data = cb_data;
struct object_stats *stats = data->stats;
size_t inflated_total = 0;
+ size_t disk_total = 0;
size_t object_count;
for (size_t i = 0; i < oids->nr; i++) {
struct object_info oi = OBJECT_INFO_INIT;
unsigned long inflated;
+ off_t disk;
oi.sizep = &inflated;
+ oi.disk_sizep = &disk;
if (odb_read_object_info_extended(data->odb, &oids->oid[i], &oi,
OBJECT_INFO_SKIP_FETCH_OBJECT |
@@ -550,24 +563,29 @@ static int count_objects(const char *path UNUSED, struct oid_array *oids,
continue;
inflated_total += inflated;
+ disk_total += disk;
}
switch (type) {
case OBJ_TAG:
stats->type_counts.tags += oids->nr;
stats->inflated_sizes.tags += inflated_total;
+ stats->disk_sizes.tags += disk_total;
break;
case OBJ_COMMIT:
stats->type_counts.commits += oids->nr;
stats->inflated_sizes.commits += inflated_total;
+ stats->disk_sizes.commits += disk_total;
break;
case OBJ_TREE:
stats->type_counts.trees += oids->nr;
stats->inflated_sizes.trees += inflated_total;
+ stats->disk_sizes.trees += disk_total;
break;
case OBJ_BLOB:
stats->type_counts.blobs += oids->nr;
stats->inflated_sizes.blobs += inflated_total;
+ stats->disk_sizes.blobs += disk_total;
break;
default:
BUG("invalid object type");