diff options
author | Edward Thomson <ethomson@github.com> | 2016-03-10 11:07:13 -0500 |
---|---|---|
committer | Edward Thomson <ethomson@github.com> | 2016-03-23 17:08:37 -0400 |
commit | a4f520a6f60a5493ff8289a23c6a9a40f2bc5c50 (patch) | |
tree | 4df4d0d372d5801887fb95803657aad3db98a0cd | |
parent | 702b23d7c40a4672d22898db93ca8978fff530ee (diff) | |
download | libgit2-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.c | 12 |
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)); |