summaryrefslogtreecommitdiff
path: root/include/git2
diff options
context:
space:
mode:
Diffstat (limited to 'include/git2')
-rw-r--r--include/git2/refs.h12
-rw-r--r--include/git2/sys/refdb_backend.h49
2 files changed, 31 insertions, 30 deletions
diff --git a/include/git2/refs.h b/include/git2/refs.h
index 4d9ec8344..44b658d5b 100644
--- a/include/git2/refs.h
+++ b/include/git2/refs.h
@@ -308,7 +308,8 @@ GIT_EXTERN(int) git_reference_delete(git_reference *ref);
*/
GIT_EXTERN(int) git_reference_list(git_strarray *array, git_repository *repo);
-typedef int (*git_reference_foreach_cb)(const char *refname, void *payload);
+typedef int (*git_reference_foreach_cb)(git_reference *reference, void *payload);
+typedef int (*git_reference_foreach_name_cb)(const char *name, void *payload);
/**
* Perform a callback on each reference in the repository.
@@ -328,6 +329,11 @@ GIT_EXTERN(int) git_reference_foreach(
git_reference_foreach_cb callback,
void *payload);
+GIT_EXTERN(int) git_reference_foreach_name(
+ git_repository *repo,
+ git_reference_foreach_name_cb callback,
+ void *payload);
+
/**
* Free the given reference.
*
@@ -378,6 +384,8 @@ GIT_EXTERN(int) git_reference_iterator_glob_new(
*/
GIT_EXTERN(int) git_reference_next(git_reference **out, git_reference_iterator *iter);
+GIT_EXTERN(int) git_reference_next_name(const char **out, git_reference_iterator *iter);
+
/**
* Free the iterator and its associated resources
*
@@ -406,7 +414,7 @@ GIT_EXTERN(void) git_reference_iterator_free(git_reference_iterator *iter);
GIT_EXTERN(int) git_reference_foreach_glob(
git_repository *repo,
const char *glob,
- git_reference_foreach_cb callback,
+ git_reference_foreach_name_cb callback,
void *payload);
/**
diff --git a/include/git2/sys/refdb_backend.h b/include/git2/sys/refdb_backend.h
index 0820cd9c5..a78d22658 100644
--- a/include/git2/sys/refdb_backend.h
+++ b/include/git2/sys/refdb_backend.h
@@ -33,8 +33,27 @@ GIT_BEGIN_DECL
* and assign `iter->parent.backend` to your `git_refdb_backend`.
*/
struct git_reference_iterator {
- git_refdb_backend *backend;
- char *glob;
+ git_refdb *db;
+
+ /**
+ * Return the current reference and advance the iterator.
+ */
+ int (*next)(
+ git_reference **ref,
+ git_reference_iterator *iter);
+
+ /**
+ * Return the name of the current reference and advance the iterator
+ */
+ int (*next_name)(
+ const char **ref_name,
+ git_reference_iterator *iter);
+
+ /**
+ * Free the iterator
+ */
+ void (*free)(
+ git_reference_iterator *iter);
};
/** An instance for a custom backend */
@@ -66,35 +85,9 @@ struct git_refdb_backend {
*/
int (*iterator)(
git_reference_iterator **iter,
- struct git_refdb_backend *backend);
-
- /**
- * Allocate a glob-filtering iterator object for the backend.
- *
- * A refdb implementation may provide this function. If it's
- * not available, the glob matching will be done by the frontend.
- */
- int (*iterator_glob)(
- git_reference_iterator **iter,
struct git_refdb_backend *backend,
const char *glob);
- /**
- * Return the current value and advance the iterator.
- *
- * A refdb implementation must provide this function.
- */
- int (*next)(
- git_reference **ref,
- git_reference_iterator *iter);
-
- /**
- * Free the iterator
- *
- * A refdb implementation must provide this function.
- */
- void (*iterator_free)(
- git_reference_iterator *iter);
/*
* Writes the given reference to the refdb. A refdb implementation
* must provide this function.