summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@github.com>2016-03-10 11:07:13 -0500
committerEdward Thomson <ethomson@github.com>2016-03-23 17:08:37 -0400
commita4f520a6f60a5493ff8289a23c6a9a40f2bc5c50 (patch)
tree4df4d0d372d5801887fb95803657aad3db98a0cd
parent702b23d7c40a4672d22898db93ca8978fff530ee (diff)
downloadlibgit2-a4f520a6f60a5493ff8289a23c6a9a40f2bc5c50.tar.gz
iterator: skip unreadable directories in fs iterator
Do not abort iteration in the middle when encountering an unreadable directory. Instead, skip it, as if it didn't exist.
-rw-r--r--tests/repo/iterator.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/tests/repo/iterator.c b/tests/repo/iterator.c
index f3a0682f9..ae14ab427 100644
--- a/tests/repo/iterator.c
+++ b/tests/repo/iterator.c
@@ -1012,7 +1012,7 @@ void test_repo_iterator__fs2(void)
git_iterator_free(i);
}
-void test_repo_iterator__unreadable_dir(void)
+void test_repo_iterator__skips_unreadable_dirs(void)
{
git_iterator *i;
const git_index_entry *e;
@@ -1028,14 +1028,20 @@ void test_repo_iterator__unreadable_dir(void)
cl_git_mkfile("empty_standard_repo/r/b/problem", "not me");
cl_must_pass(p_chmod("empty_standard_repo/r/b", 0000));
cl_must_pass(p_mkdir("empty_standard_repo/r/c", 0777));
+ cl_git_mkfile("empty_standard_repo/r/c/foo", "aloha");
cl_git_mkfile("empty_standard_repo/r/d", "final");
cl_git_pass(git_iterator_for_filesystem(
&i, "empty_standard_repo/r", NULL));
cl_git_pass(git_iterator_advance(&e, i)); /* a */
- cl_git_fail(git_iterator_advance(&e, i)); /* b */
- cl_assert_equal_i(GIT_ITEROVER, git_iterator_advance(&e, i));
+ cl_assert_equal_s("a", e->path);
+
+ cl_git_pass(git_iterator_advance(&e, i)); /* c/foo */
+ cl_assert_equal_s("c/foo", e->path);
+
+ cl_git_pass(git_iterator_advance(&e, i)); /* d */
+ cl_assert_equal_s("d", e->path);
cl_must_pass(p_chmod("empty_standard_repo/r/b", 0777));