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:16:55 +0400
committerCarlos Martín Nieto <cmn@dwim.me>2013-05-11 13:20:37 +0400
commit51fc5e895d7655611431a0bdb76b9fd8499a9e1a (patch)
tree0283022040fdd80f065fa79519e01fca5c964da9
parent69a3c766b6c6b9bbe2859bf8572c12b93a9d37c9 (diff)
Make sure the ref iterator works in an repo without physical presence
-rw-r--r--src/refdb.c6
-rw-r--r--tests-clar/refs/iterator.c18
2 files changed, 23 insertions, 1 deletions
diff --git a/src/refdb.c b/src/refdb.c
index 73882e807..269234bfa 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -128,7 +128,11 @@ 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 || !db->backend->iterator) {
+ giterr_set(GITERR_REFERENCE, "This backend doesn't support iterators");
+ return -1;
+ }
+
if (db->backend->iterator(&iter, db->backend) < 0) {
git__free(iter);
return -1;
diff --git a/tests-clar/refs/iterator.c b/tests-clar/refs/iterator.c
index aef0453c8..d5555c657 100644
--- a/tests-clar/refs/iterator.c
+++ b/tests-clar/refs/iterator.c
@@ -74,3 +74,21 @@ void test_refs_iterator__list(void)
}
git_vector_free(&output);
}
+
+void test_refs_iterator__empty(void)
+{
+ git_reference_iterator *iter;
+ git_odb *odb;
+ const char *name;
+ git_repository *empty;
+
+ cl_git_pass(git_odb_new(&odb));
+ cl_git_pass(git_repository_wrap_odb(&empty, odb));
+
+ cl_git_pass(git_reference_iterator_new(&iter, empty));
+ cl_assert_equal_i(GIT_ITEROVER, git_reference_next(&name, iter));
+
+ git_reference_iterator_free(iter);
+ git_odb_free(odb);
+ git_repository_free(empty);
+}