From 0235017eafa8dfc3a7353b7091ad5109d0beb7a5 Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Fri, 1 Apr 2011 10:29:16 +0200 Subject: clean: unreadable directory may still be rmdir-able if it is empty As a last ditch effort, try rmdir(2) when we cannot read the directory to be removed. It may be an empty directory that we can remove without any permission, as long as we can modify its parent directory. Noticed by Linus. Signed-off-by: Alex Riesen Signed-off-by: Junio C Hamano diff --git a/dir.c b/dir.c index 570b651..aa1a718 100644 --- a/dir.c +++ b/dir.c @@ -1088,7 +1088,7 @@ int remove_dir_recursively(struct strbuf *path, int flag) dir = opendir(path->buf); if (!dir) - return -1; + return rmdir(path->buf); if (path->buf[original_len - 1] != '/') strbuf_addch(path, '/'); diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh index 02f67b7..9b12681 100755 --- a/t/t7300-clean.sh +++ b/t/t7300-clean.sh @@ -453,4 +453,11 @@ test_expect_success 'git clean -e' ' ) ' +test_expect_success SANITY 'git clean -d with an unreadable empty directory' ' + mkdir foo && + chmod a= foo && + git clean -dfx foo && + ! test -d foo +' + test_done -- cgit v0.10.2-6-g49f6