]> git.ipfire.org Git - thirdparty/git.git/commitdiff
odb/source-packed: wire up `count_objects()` callback
authorPatrick Steinhardt <ps@pks.im>
Wed, 17 Jun 2026 06:39:55 +0000 (08:39 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Jun 2026 12:00:00 +0000 (05:00 -0700)
Move `packfile_store_count_objects()` from "packfile.c" into
"odb/source-packed.c" and wire it up as the `count_objects()` callback
of the "packed" source.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
odb/source-files.c
odb/source-packed.c
packfile.c
packfile.h

index c73a7e5f9096ad5ea496d6cc2ed2c1fb178869dc..274923e0ba690ab54ab1e0e104f65a15dcc142d2 100644 (file)
@@ -103,7 +103,7 @@ static int odb_source_files_count_objects(struct odb_source *source,
        unsigned long count;
        int ret;
 
-       ret = packfile_store_count_objects(files->packed, flags, &count);
+       ret = odb_source_count_objects(&files->packed->base, flags, &count);
        if (ret < 0)
                goto out;
 
index a61c809c8c8fa64e58a4f0204110f56f85440273..070a4e39585b300c5f8b159ed99d081da60866a8 100644 (file)
@@ -338,6 +338,38 @@ out:
        return ret;
 }
 
+static int odb_source_packed_count_objects(struct odb_source *source,
+                                          enum odb_count_objects_flags flags UNUSED,
+                                          unsigned long *out)
+{
+       struct odb_source_packed *packed = odb_source_packed_downcast(source);
+       struct packfile_list_entry *e;
+       struct multi_pack_index *m;
+       unsigned long count = 0;
+       int ret;
+
+       m = get_multi_pack_index(&packed->files->base);
+       if (m)
+               count += m->num_objects + m->num_objects_in_base;
+
+       for (e = packfile_store_get_packs(packed); e; e = e->next) {
+               if (e->pack->multi_pack_index)
+                       continue;
+               if (open_pack_index(e->pack)) {
+                       ret = -1;
+                       goto out;
+               }
+
+               count += e->pack->num_objects;
+       }
+
+       *out = count;
+       ret = 0;
+
+out:
+       return ret;
+}
+
 void (*report_garbage)(unsigned seen_bits, const char *path);
 
 static void report_helper(const struct string_list *list,
@@ -549,6 +581,7 @@ struct odb_source_packed *odb_source_packed_new(struct odb_source_files *parent)
        packed->base.read_object_info = odb_source_packed_read_object_info;
        packed->base.read_object_stream = odb_source_packed_read_object_stream;
        packed->base.for_each_object = odb_source_packed_for_each_object;
+       packed->base.count_objects = odb_source_packed_count_objects;
 
        if (!is_absolute_path(parent->base.path))
                chdir_notify_register(NULL, odb_source_packed_reparent, packed);
index b8d6054c16aa726b5acc48118767d67676c0d049..2da6bbe2b510c7b0ca0048c1474d2542c2fb5a1c 100644 (file)
@@ -866,37 +866,6 @@ struct packfile_list_entry *packfile_store_get_packs(struct odb_source_packed *s
        return store->packs.head;
 }
 
-int packfile_store_count_objects(struct odb_source_packed *store,
-                                enum odb_count_objects_flags flags UNUSED,
-                                unsigned long *out)
-{
-       struct packfile_list_entry *e;
-       struct multi_pack_index *m;
-       unsigned long count = 0;
-       int ret;
-
-       m = get_multi_pack_index(&store->files->base);
-       if (m)
-               count += m->num_objects + m->num_objects_in_base;
-
-       for (e = packfile_store_get_packs(store); e; e = e->next) {
-               if (e->pack->multi_pack_index)
-                       continue;
-               if (open_pack_index(e->pack)) {
-                       ret = -1;
-                       goto out;
-               }
-
-               count += e->pack->num_objects;
-       }
-
-       *out = count;
-       ret = 0;
-
-out:
-       return ret;
-}
-
 unsigned long unpack_object_header_buffer(const unsigned char *buf,
                unsigned long len, enum object_type *type, size_t *sizep)
 {
index 0097de0b274ff9446f47d114153264fee8d68572..0613fd3c639dc878f5eba0d5c185a25901d82046 100644 (file)
@@ -141,16 +141,6 @@ enum kept_pack_type {
        KEPT_PACK_IN_CORE_OPEN = (1 << 2),
 };
 
-/*
- * Count the number objects contained in the given packfile store. If
- * successful, the number of objects will be written to the `out` pointer.
- *
- * Return 0 on success, a negative error code otherwise.
- */
-int packfile_store_count_objects(struct odb_source_packed *store,
-                                enum odb_count_objects_flags flags,
-                                unsigned long *out);
-
 /*
  * Retrieve the cache of kept packs from the given packfile store. Accepts a
  * combination of `kept_pack_type` flags. The cache is computed on demand and