diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2013-03-02 19:31:03 +0100 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2013-05-11 11:20:37 +0200 |
commit | 4def7035cac133607256fd91352ce54ac4548a7c (patch) | |
tree | 6956733c0ef644f9f2a6bea1e603e3fcb72fd954 /src/refdb.c | |
parent | b641c00eebb3c60e8719c0dfc55dde91ca30a5d2 (diff) | |
download | libgit2-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.c | 24 |
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, |