diff options
author | Russell Belfer <rb@github.com> | 2014-08-08 13:17:50 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-08-08 13:17:50 -0700 |
commit | f18234fad62b8f890ccd01bb15443afc2484af1b (patch) | |
tree | dc79accc50fc391fbbca3001df0538d19ffc01fa /tests | |
parent | 8f759ac0b373eea9dcec680524a68a527d637937 (diff) | |
download | libgit2-f18234fad62b8f890ccd01bb15443afc2484af1b.tar.gz |
Don't report status on named pipes
Git skips entries in directories that are not S_ISDIR, S_ISREG, or
S_ISLNK, so let's make libgit2 do the same thing.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/repo/iterator.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/repo/iterator.c b/tests/repo/iterator.c index fb70a9ea0..764c2c6cd 100644 --- a/tests/repo/iterator.c +++ b/tests/repo/iterator.c @@ -960,3 +960,35 @@ void test_repo_iterator__fs_preserves_error(void) git_iterator_free(i); } + +void test_repo_iterator__skips_fifos_and_such(void) +{ +#ifndef GIT_WIN32 + git_iterator *i; + const git_index_entry *e; + + g_repo = cl_git_sandbox_init("empty_standard_repo"); + + cl_must_pass(p_mkdir("empty_standard_repo/dir", 0777)); + cl_git_mkfile("empty_standard_repo/file", "not me"); + + cl_assert(!mkfifo("empty_standard_repo/fifo", 0777)); + cl_assert(!access("empty_standard_repo/fifo", F_OK)); + + cl_git_pass(git_iterator_for_filesystem( + &i, "empty_standard_repo", GIT_ITERATOR_INCLUDE_TREES | + GIT_ITERATOR_DONT_AUTOEXPAND, NULL, NULL)); + + cl_git_pass(git_iterator_advance(&e, i)); /* .git */ + cl_assert(S_ISDIR(e->mode)); + cl_git_pass(git_iterator_advance(&e, i)); /* dir */ + cl_assert(S_ISDIR(e->mode)); + /* skips fifo */ + cl_git_pass(git_iterator_advance(&e, i)); /* file */ + cl_assert(S_ISREG(e->mode)); + + cl_assert_equal_i(GIT_ITEROVER, git_iterator_advance(&e, i)); + + git_iterator_free(i); +#endif +} |