Consider unreadable empty directories. rmdir(2) will remove them just fine, assuming the parent directory is modifiable. Noticed by Linus. Signed-off-by: Alex Riesen <raa.lkml@xxxxxxxxx> --- On Fri, Apr 1, 2011 at 00:01, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > Which is kind of understandable, but at the same time, if it's empty, > a "rmdir()" will just work. So git gave up a bit too soon. ... > Now, I realize that if the directory isn't empty, and is unreadable, > we really should give up (although a better error message about _why_ > we failed may be in order) rather than try to chmod it or anything > like that. But the simple "try to rmdir it" might be a good addition > for the trivial case. It is not tested, but looks trivial. The system I made it on is a Cygwin machine, and a test from last master pull is still running (since two days). And sorry, it is not based on master. Should apply without problems, though. --- dir.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/dir.c b/dir.c index 325fb56..7251426 100644 --- a/dir.c +++ b/dir.c @@ -1191,8 +1191,11 @@ int remove_dir_recursively(struct strbuf *path, int flag) return 0; dir = opendir(path->buf); - if (!dir) + if (!dir) { + if (rmdir(path->buf) == 0) + return 0; return -1; + } if (path->buf[original_len - 1] != '/') strbuf_addch(path, '/'); -- 1.7.2.2.240.g7d094
Attachment:
0001-Try-to-remove-the-given-path-even-if-it-can-t-be-open.diff
Description: Binary data