Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2013-09-24 22:52:58 +0400
committerEdward Thomson <ethomson@microsoft.com>2013-09-24 22:52:58 +0400
commit5c3b8ef48bcbf0843cdc7272fec7a32819998f58 (patch)
tree48ab07b34700939169e9b1fe21279d9ce232c554 /src/path.c
parent4a1b40159b4b0b2a954d40e4489331e3f22c8994 (diff)
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.
Diffstat (limited to 'src/path.c')
-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)