summaryrefslogtreecommitdiff
path: root/src/index.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.c')
-rw-r--r--src/index.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/index.c b/src/index.c
index 8858d23a1..01f23e5ed 100644
--- a/src/index.c
+++ b/src/index.c
@@ -1976,6 +1976,51 @@ int git_index_has_conflicts(const git_index *index)
return 0;
}
+int git_index_iterator_new(
+ git_index_iterator **iterator_out,
+ git_index *index)
+{
+ git_index_iterator *it;
+ int error;
+
+ assert(iterator_out && index);
+
+ it = git__calloc(1, sizeof(git_index_iterator));
+ GITERR_CHECK_ALLOC(it);
+
+ if ((error = git_index_snapshot_new(&it->snap, index)) < 0) {
+ git__free(it);
+ return error;
+ }
+
+ it->index = index;
+
+ *iterator_out = it;
+ return 0;
+}
+
+int git_index_iterator_next(
+ const git_index_entry **out,
+ git_index_iterator *it)
+{
+ assert(out && it);
+
+ if (it->cur >= git_vector_length(&it->snap))
+ return GIT_ITEROVER;
+
+ *out = (git_index_entry *)git_vector_get(&it->snap, it->cur++);
+ return 0;
+}
+
+void git_index_iterator_free(git_index_iterator *it)
+{
+ if (it == NULL)
+ return;
+
+ git_index_snapshot_release(&it->snap, it->index);
+ git__free(it);
+}
+
int git_index_conflict_iterator_new(
git_index_conflict_iterator **iterator_out,
git_index *index)