summaryrefslogtreecommitdiff
path: root/include/git2/sys/refdb_backend.h
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 /include/git2/sys/refdb_backend.h
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 'include/git2/sys/refdb_backend.h')
-rw-r--r--include/git2/sys/refdb_backend.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/include/git2/sys/refdb_backend.h b/include/git2/sys/refdb_backend.h
index d5f599fec..4c882b5cd 100644
--- a/include/git2/sys/refdb_backend.h
+++ b/include/git2/sys/refdb_backend.h
@@ -20,6 +20,22 @@
*/
GIT_BEGIN_DECL
+
+/**
+ * Every backend's iterator must have a pointer to itself as the first
+ * element, so the API can talk to it. You'd define your iterator as
+ *
+ * struct my_iterator {
+ * git_reference_iterator parent;
+ * ...
+ * }
+ *
+ * and assing `iter->parent.backend` to your `git_refdb_backend`.
+ */
+struct git_reference_iterator {
+ git_refdb_backend *backend;
+};
+
/** An instance for a custom backend */
struct git_refdb_backend {
unsigned int version;
@@ -66,6 +82,25 @@ struct git_refdb_backend {
void *payload);
/**
+ * Allocate an iterator object for the backend
+ */
+ int (*iterator)(
+ git_reference_iterator **iter,
+ struct git_refdb_backend *backend);
+
+ /**
+ * Return the current value and advance the iterator.
+ */
+ int (*next)(
+ const char **name,
+ git_reference_iterator *iter);
+
+ /**
+ * Free the iterator
+ */
+ void (*iterator_free)(
+ git_reference_iterator *iter);
+ /*
* Writes the given reference to the refdb. A refdb implementation
* must provide this function.
*/