Merge pull request #4665 from neithernut/fix-refdb-glob refdb_fs: fix regression: failure when globbing for non-existant references
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
diff --git a/src/refdb_fs.c b/src/refdb_fs.c
index 9db6281..0b4bbb4 100644
--- a/src/refdb_fs.c
+++ b/src/refdb_fs.c
@@ -538,12 +538,16 @@ static int iter_load_loose_paths(refdb_fs_backend *backend, refdb_fs_iter *iter)
}
if ((error = git_buf_printf(&path, "%s/", backend->commonpath)) < 0 ||
- (error = git_buf_put(&path, ref_prefix, ref_prefix_len)) < 0 ||
- (error = git_iterator_for_filesystem(&fsit, path.ptr, &fsit_opts)) < 0) {
+ (error = git_buf_put(&path, ref_prefix, ref_prefix_len)) < 0) {
git_buf_free(&path);
return error;
}
+ if ((error = git_iterator_for_filesystem(&fsit, path.ptr, &fsit_opts)) < 0) {
+ git_buf_free(&path);
+ return (iter->glob && error == GIT_ENOTFOUND)? 0 : error;
+ }
+
error = git_buf_sets(&path, ref_prefix);
while (!error && !git_iterator_advance(&entry, fsit)) {
diff --git a/tests/refs/foreachglob.c b/tests/refs/foreachglob.c
index a09191e..a135293 100644
--- a/tests/refs/foreachglob.c
+++ b/tests/refs/foreachglob.c
@@ -62,6 +62,11 @@ void test_refs_foreachglob__retrieve_local_branches(void)
assert_retrieval("refs/heads/*", 12);
}
+void test_refs_foreachglob__retrieve_nonexistant(void)
+{
+ assert_retrieval("refs/nonexistent/*", 0);
+}
+
void test_refs_foreachglob__retrieve_partially_named_references(void)
{
/*