mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 20:29:27 +00:00
Merge pull request #2506 from libgit2/rb/ignore-pipes-etc
Don't report status on named pipes
This commit is contained in:
commit
35f186b6ca
19
src/path.c
19
src/path.c
@ -1110,28 +1110,29 @@ int git_path_dirload_with_stat(
|
|||||||
|
|
||||||
if ((error = git_buf_joinpath(&full, full.ptr, ps->path)) < 0 ||
|
if ((error = git_buf_joinpath(&full, full.ptr, ps->path)) < 0 ||
|
||||||
(error = git_path_lstat(full.ptr, &ps->st)) < 0) {
|
(error = git_path_lstat(full.ptr, &ps->st)) < 0) {
|
||||||
|
|
||||||
if (error == GIT_ENOTFOUND) {
|
if (error == GIT_ENOTFOUND) {
|
||||||
giterr_clear();
|
/* file was removed between readdir and lstat */
|
||||||
error = 0;
|
|
||||||
git_vector_remove(contents, i--);
|
git_vector_remove(contents, i--);
|
||||||
continue;
|
} else {
|
||||||
}
|
|
||||||
/* Treat the file as unreadable if we get any other error */
|
/* Treat the file as unreadable if we get any other error */
|
||||||
if (error != 0) {
|
|
||||||
giterr_clear();
|
|
||||||
error = 0;
|
|
||||||
memset(&ps->st, 0, sizeof(ps->st));
|
memset(&ps->st, 0, sizeof(ps->st));
|
||||||
ps->st.st_mode = GIT_FILEMODE_UNREADABLE;
|
ps->st.st_mode = GIT_FILEMODE_UNREADABLE;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
giterr_clear();
|
||||||
|
error = 0;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (S_ISDIR(ps->st.st_mode)) {
|
if (S_ISDIR(ps->st.st_mode)) {
|
||||||
ps->path[ps->path_len++] = '/';
|
ps->path[ps->path_len++] = '/';
|
||||||
ps->path[ps->path_len] = '\0';
|
ps->path[ps->path_len] = '\0';
|
||||||
}
|
}
|
||||||
|
else if (!S_ISREG(ps->st.st_mode) && !S_ISLNK(ps->st.st_mode)) {
|
||||||
|
/* skip everything but dirs, plain files, and symlinks */
|
||||||
|
git_vector_remove(contents, i--);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sort now that directory suffix is added */
|
/* sort now that directory suffix is added */
|
||||||
|
@ -960,3 +960,35 @@ void test_repo_iterator__fs_preserves_error(void)
|
|||||||
|
|
||||||
git_iterator_free(i);
|
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
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user