Re: [PATCH] Try to remove the given path even if it can't be opened
Alex Riesen venit, vidit, dixit 01.04.2011 10:29:
Show 19 quoted lines
> 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@gmail.com>
> ---
> On Fri, Apr 1, 2011 at 00:01, Linus Torvalds
> <torvalds@linux-foundation.org> 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
Show 24 quoted lines
> 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, '/');
> How about simply
if (!dir)
return rmdir(path->buf);
like we do later on in that function?
Michael