diff options
author | Vicent Marti <vicent@github.com> | 2014-03-05 21:07:20 +0100 |
---|---|---|
committer | Vicent Marti <vicent@github.com> | 2014-03-05 21:07:20 +0100 |
commit | a62ad3c353380fb95d0f482859b445d430018aa9 (patch) | |
tree | c96ad9be5d46001adce3ca7542572b028c18ceb4 | |
parent | 967d3f2e3e81b2f21d2b3dee12c58de35572cecb (diff) | |
parent | a213a7bfa82b7171b90c415cbdb44d469e747ece (diff) | |
download | libgit2-a62ad3c353380fb95d0f482859b445d430018aa9.tar.gz |
Merge pull request #2164 from libgit2/cmn/refs-delete-iteration
refdb: catch a directory disappearing
-rw-r--r-- | src/path.c | 3 | ||||
-rw-r--r-- | src/refdb_fs.c | 12 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/path.c b/src/path.c index 89409eae4..fa800b74c 100644 --- a/src/path.c +++ b/src/path.c @@ -853,6 +853,9 @@ int git_path_direach( if ((dir = opendir(path->ptr)) == NULL) { giterr_set(GITERR_OS, "Failed to open directory '%s'", path->ptr); + if (errno == ENOENT) + return GIT_ENOTFOUND; + return -1; } diff --git a/src/refdb_fs.c b/src/refdb_fs.c index 43682f40e..3219b0519 100644 --- a/src/refdb_fs.c +++ b/src/refdb_fs.c @@ -272,9 +272,17 @@ static int _dirent_loose_load(void *payload, git_buf *full_path) if (git__suffixcmp(full_path->ptr, ".lock") == 0) return 0; - if (git_path_isdir(full_path->ptr)) - return git_path_direach( + if (git_path_isdir(full_path->ptr)) { + int error = git_path_direach( full_path, backend->direach_flags, _dirent_loose_load, backend); + /* Race with the filesystem, ignore it */ + if (error == GIT_ENOTFOUND) { + giterr_clear(); + return 0; + } + + return error; + } file_path = full_path->ptr + strlen(backend->path); |