summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2013-09-24 14:52:58 -0400
committerEdward Thomson <ethomson@microsoft.com>2013-09-24 14:52:58 -0400
commit5c3b8ef48bcbf0843cdc7272fec7a32819998f58 (patch)
tree48ab07b34700939169e9b1fe21279d9ce232c554
parent4a1b40159b4b0b2a954d40e4489331e3f22c8994 (diff)
downloadlibgit2-5c3b8ef48bcbf0843cdc7272fec7a32819998f58.tar.gz
Ignore files that disappear while iterating
On occasion, files can disappear while we're iterating the filesystem, between calls to readdir and stat. Let's pretend those didn't exist in the first place.
-rw-r--r--src/path.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/path.c b/src/path.c
index 42b3d6f3e..9d8e90361 100644
--- a/src/path.c
+++ b/src/path.c
@@ -902,8 +902,16 @@ int git_path_dirload_with_stat(
git_buf_truncate(&full, prefix_len);
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) {
+ giterr_clear();
+ error = 0;
+ git_vector_remove(contents, i--);
+ continue;
+ }
+
break;
+ }
if (S_ISDIR(ps->st.st_mode)) {
if ((error = git_buf_joinpath(&full, full.ptr, ".git")) < 0)