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

Reply via email to