diff options
author | Vicent Martà <vicent@github.com> | 2012-07-12 09:42:54 -0700 |
---|---|---|
committer | Vicent Martà <vicent@github.com> | 2012-07-12 09:42:54 -0700 |
commit | dd4345b4247f067e282ccbcde0f0b36d3d571470 (patch) | |
tree | 7db054c78dd6335c3308fb7ea02e82cf6c178720 /src/odb_pack.c | |
parent | 0cf6b2f29ebf9d6342bd205197938e881ccc246f (diff) | |
parent | 521aedad307c6f72d6f6d660943508b2b015f6dd (diff) | |
download | libgit2-dd4345b4247f067e282ccbcde0f0b36d3d571470.tar.gz |
Merge pull request #789 from carlosmn/odb-foreach
odb: add git_odb_foreach()
Diffstat (limited to 'src/odb_pack.c')
-rw-r--r-- | src/odb_pack.c | 20 |
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; |