Skip to content

Commit 51fc5e8

Browse files
committed
Make sure the ref iterator works in an repo without physical presence
1 parent 69a3c76 commit 51fc5e8

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/refdb.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,11 @@ int git_refdb_iterator(git_reference_iterator **out, git_refdb *db)
128128
{
129129
git_reference_iterator *iter;
130130

131-
/* FIXME: don't segfault when there is no backends */
131+
if (!db->backend || !db->backend->iterator) {
132+
giterr_set(GITERR_REFERENCE, "This backend doesn't support iterators");
133+
return -1;
134+
}
135+
132136
if (db->backend->iterator(&iter, db->backend) < 0) {
133137
git__free(iter);
134138
return -1;

tests-clar/refs/iterator.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,21 @@ void test_refs_iterator__list(void)
7474
}
7575
git_vector_free(&output);
7676
}
77+
78+
void test_refs_iterator__empty(void)
79+
{
80+
git_reference_iterator *iter;
81+
git_odb *odb;
82+
const char *name;
83+
git_repository *empty;
84+
85+
cl_git_pass(git_odb_new(&odb));
86+
cl_git_pass(git_repository_wrap_odb(&empty, odb));
87+
88+
cl_git_pass(git_reference_iterator_new(&iter, empty));
89+
cl_assert_equal_i(GIT_ITEROVER, git_reference_next(&name, iter));
90+
91+
git_reference_iterator_free(iter);
92+
git_odb_free(odb);
93+
git_repository_free(empty);
94+
}

0 commit comments

Comments
 (0)