aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Riesen <raa.lkml@gmail.com>2011-04-01 10:29:16 +0200
committerJunio C Hamano <gitster@pobox.com>2011-04-01 11:16:21 -0700
commit0235017eafa8dfc3a7353b7091ad5109d0beb7a5 (patch)
treef62dcba6b55c4043600bbd0620b91e54c885b129
parent2352570bf43368f3d3931f7b24bb7fd44e68eef3 (diff)
downloadgit-0235017eafa8dfc3a7353b7091ad5109d0beb7a5.tar.gz
git-0235017eafa8dfc3a7353b7091ad5109d0beb7a5.tar.xz
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 <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--dir.c2
-rwxr-xr-xt/t7300-clean.sh7
2 files changed, 8 insertions, 1 deletions
diff --git a/dir.c b/dir.c
index 570b651a1..aa1a7181f 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 02f67b73b..9b12681f9 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