Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2013-05-04 17:57:44 +0400
committerCarlos Martín Nieto <cmn@dwim.me>2013-05-11 13:20:37 +0400
commit932af0e9eb35e37b2cf993c0806d6ea46476cf39 (patch)
tree9d0c4b6e516ec37253ada989595cb359d5282f67 /tests-clar
parentfb592a96ebac46f0e176fbbe849cf9b52b9f4727 (diff)
Add iterator support to the testdb backend
Diffstat (limited to 'tests-clar')
-rw-r--r--tests-clar/refdb/testdb.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests-clar/refdb/testdb.c b/tests-clar/refdb/testdb.c
index 627254e44..eee60ac90 100644
--- a/tests-clar/refdb/testdb.c
+++ b/tests-clar/refdb/testdb.c
@@ -112,6 +112,49 @@ static int refdb_test_backend__lookup(
return GIT_ENOTFOUND;
}
+typedef struct {
+ git_reference_iterator parent;
+ size_t i;
+} refdb_test_iter;
+
+static int refdb_test_backend__iterator(git_reference_iterator **out, git_refdb_backend *_backend)
+{
+ refdb_test_iter *iter;
+
+ GIT_UNUSED(_backend);
+
+ iter = git__malloc(sizeof(refdb_test_iter));
+ GITERR_CHECK_ALLOC(iter);
+
+ iter->parent.backend = _backend;
+ iter->i = 0;
+
+ *out = (git_reference_iterator *) iter;
+
+ return 0;
+}
+
+static int refdb_test_backend__next(const char **name, git_reference_iterator *_iter)
+{
+ refdb_test_entry *entry;
+ refdb_test_backend *backend = (refdb_test_backend *) _iter->backend;
+ refdb_test_iter *iter = (refdb_test_iter *) _iter;
+
+ entry = git_vector_get(&backend->refs, iter->i);
+ if (!entry)
+ return GIT_ITEROVER;
+
+ *name = entry->name;
+ iter->i++;
+
+ return 0;
+}
+
+static void refdb_test_backend__iterator_free(git_reference_iterator *iter)
+{
+ git__free(iter);
+}
+
static int refdb_test_backend__foreach(
git_refdb_backend *_backend,
unsigned int list_flags,
@@ -200,6 +243,9 @@ int refdb_backend_test(
backend->parent.exists = &refdb_test_backend__exists;
backend->parent.lookup = &refdb_test_backend__lookup;
+ backend->parent.iterator = &refdb_test_backend__iterator;
+ backend->parent.next = &refdb_test_backend__next;
+ backend->parent.iterator_free = &refdb_test_backend__iterator_free;
backend->parent.foreach = &refdb_test_backend__foreach;
backend->parent.write = &refdb_test_backend__write;
backend->parent.delete = &refdb_test_backend__delete;