summaryrefslogtreecommitdiff
path: root/src/refdb.c
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2013-03-02 19:31:03 +0100
committerCarlos Martín Nieto <cmn@dwim.me>2013-05-11 11:20:37 +0200
commit4def7035cac133607256fd91352ce54ac4548a7c (patch)
tree6956733c0ef644f9f2a6bea1e603e3fcb72fd954 /src/refdb.c
parentb641c00eebb3c60e8719c0dfc55dde91ca30a5d2 (diff)
downloadlibgit2-4def7035cac133607256fd91352ce54ac4548a7c.tar.gz
refs: introduce an iterator
This allows us to get a list of reference names in a loop instead of callbacks.
Diffstat (limited to 'src/refdb.c')
-rw-r--r--src/refdb.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/refdb.c b/src/refdb.c
index 33a1934d1..73882e807 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -124,6 +124,30 @@ int git_refdb_lookup(git_reference **out, git_refdb *db, const char *ref_name)
return error;
}
+int git_refdb_iterator(git_reference_iterator **out, git_refdb *db)
+{
+ git_reference_iterator *iter;
+
+ /* FIXME: don't segfault when there is no backends */
+ if (db->backend->iterator(&iter, db->backend) < 0) {
+ git__free(iter);
+ return -1;
+ }
+
+ *out = iter;
+ return 0;
+}
+
+int git_refdb_next(const char **out, git_reference_iterator *iter)
+{
+ return iter->backend->next(out, iter);
+}
+
+void git_refdb_iterator_free(git_reference_iterator *iter)
+{
+ iter->backend->iterator_free(iter);
+}
+
int git_refdb_foreach(
git_refdb *db,
unsigned int list_flags,