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;
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,
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);
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)
{
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