summaryrefslogtreecommitdiff
path: root/src/odb_pack.c
diff options
context:
space:
mode:
authorBen Straub <bstraub@github.com>2012-07-17 08:08:34 -0700
committerBen Straub <bstraub@github.com>2012-07-17 08:08:34 -0700
commitbfc65634050dc52e3ed6b4497ebbb511e39d6e1e (patch)
tree32b03847b8a152b69bc3b48b6bb32e7b8621f45e /src/odb_pack.c
parent1d68fcd04b21a2c5665d0ca6a5543e7166c73457 (diff)
parentea5d2ce4cfa6cec89e2d844a70d1eb24bb401c7d (diff)
downloadlibgit2-bfc65634050dc52e3ed6b4497ebbb511e39d6e1e.tar.gz
Merge branch 'development' into clone
Diffstat (limited to 'src/odb_pack.c')
-rw-r--r--src/odb_pack.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/odb_pack.c b/src/odb_pack.c
index 458f288d9..4b860e864 100644
--- a/src/odb_pack.c
+++ b/src/odb_pack.c
@@ -420,6 +420,25 @@ static int pack_backend__exists(git_odb_backend *backend, const git_oid *oid)
return pack_entry_find(&e, (struct pack_backend *)backend, oid) == 0;
}
+static int pack_backend__foreach(git_odb_backend *_backend, int (*cb)(git_oid *oid, void *data), void *data)
+{
+ struct git_pack_file *p;
+ struct pack_backend *backend;
+ unsigned int i;
+
+ assert(_backend && cb);
+ backend = (struct pack_backend *)_backend;
+
+ /* Make sure we know about the packfiles */
+ if (packfile_refresh_all(backend) < 0)
+ return -1;
+
+ git_vector_foreach(&backend->packs, i, p) {
+ git_pack_foreach_entry(p, cb, &data);
+ }
+ return 0;
+}
+
static void pack_backend__free(git_odb_backend *_backend)
{
struct pack_backend *backend;
@@ -463,6 +482,7 @@ int git_odb_backend_pack(git_odb_backend **backend_out, const char *objects_dir)
backend->parent.read_prefix = &pack_backend__read_prefix;
backend->parent.read_header = NULL;
backend->parent.exists = &pack_backend__exists;
+ backend->parent.foreach = &pack_backend__foreach;
backend->parent.free = &pack_backend__free;
*backend_out = (git_odb_backend *)backend;