Commit 20306d36c8f3816335834f194593c5e3d6519cda

Patrick Steinhardt 2018-06-06T14:31:28

Merge pull request #4665 from neithernut/fix-refdb-glob refdb_fs: fix regression: failure when globbing for non-existant references

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)
 {
 	/*