The MIDX files contain a complete object count, so we can report the number of objects in the MIDX. The count remains approximate as there may be overlap between the packfiles not referenced by the MIDX.
Signed-off-by: Derrick Stolee <dsto...@microsoft.com> --- packfile.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packfile.c b/packfile.c index 1c0822878b..866a1f30dd 100644 --- a/packfile.c +++ b/packfile.c @@ -803,7 +803,8 @@ static void prepare_packed_git_one(char *objdir, int local) if (ends_with(de->d_name, ".idx") || ends_with(de->d_name, ".pack") || ends_with(de->d_name, ".bitmap") || - ends_with(de->d_name, ".keep")) + ends_with(de->d_name, ".keep") || + ends_with(de->d_name, ".midx")) string_list_append(&garbage, path.buf); else report_garbage(PACKDIR_FILE_GARBAGE, path.buf); @@ -828,9 +829,12 @@ unsigned long approximate_object_count(void) static unsigned long count; if (!approximate_object_count_valid) { struct packed_git *p; + struct midxed_git *m; - prepare_packed_git(); + prepare_packed_git_internal(1); count = 0; + for (m = midxed_git; m; m = m->next) + count += m->num_objects; for (p = packed_git; p; p = p->next) { if (open_pack_index(p)) continue; -- 2.15.0