From: Jeff King Date: Fri, 19 Feb 2010 05:57:21 +0000 (-0500) Subject: rm: fix bug in recursive subdirectory removal X-Git-Tag: v1.7.0.1~12^2 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=3fc0d131c573f6f774e2e4abba9cbda694b08321;p=git.git rm: fix bug in recursive subdirectory removal If we remove a path in a/deep/subdirectory, we should try to remove as many trailing components as possible (i.e., subdirectory, then deep, then a). However, the test for the return value of rmdir was reversed, so we only ever deleted at most one level. The fix is in remove_path, so "apply" and "merge-recursive" also are fixed. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- diff --git a/dir.c b/dir.c index 6aae09a22..fdc0a2ede 100644 --- a/dir.c +++ b/dir.c @@ -864,7 +864,7 @@ int remove_path(const char *name) slash = dirs + (slash - name); do { *slash = '\0'; - } while (rmdir(dirs) && (slash = strrchr(dirs, '/'))); + } while (rmdir(dirs) == 0 && (slash = strrchr(dirs, '/'))); free(dirs); } return 0; diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh index 76b1bb454..0aaf0ad84 100755 --- a/t/t3600-rm.sh +++ b/t/t3600-rm.sh @@ -271,4 +271,12 @@ test_expect_success 'choking "git rm" should not let it die with cruft' ' test "$status" != 0 ' +test_expect_success 'rm removes subdirectories recursively' ' + mkdir -p dir/subdir/subsubdir && + echo content >dir/subdir/subsubdir/file && + git add dir/subdir/subsubdir/file && + git rm -f dir/subdir/subsubdir/file && + ! test -d dir +' + test_done