diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-01-19 05:12:57 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-01-19 05:12:57 +0300 |
commit | 26b9f5cc99a35d4f678c2f565e48237fc9515444 (patch) | |
tree | 52775c8cb6e23c620adb84f6f34186085a41d8d9 | |
parent | 243157506725befcf7c7ed7e79ca4708b63f3a65 (diff) | |
parent | c5e558a80ad27774b9984258a31fbf46a1d7c152 (diff) |
Merge branch 'pc/uninteresting-submodule-disappear-upon-switch-branches'
* pc/uninteresting-submodule-disappear-upon-switch-branches:
Remove empty directories when checking out a commit with fewer submodules
-rwxr-xr-x | t/t7400-submodule-basic.sh | 9 | ||||
-rw-r--r-- | unpack-trees.c | 12 |
2 files changed, 19 insertions, 2 deletions
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index a0cc99ab9f..1a4dc5f893 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -299,6 +299,15 @@ test_expect_success 'ls-files gracefully handles trailing slash' ' ' +test_expect_success 'moving to a commit without submodule does not leave empty dir' ' + rm -rf init && + mkdir init && + git reset --hard && + git checkout initial && + test ! -d init && + git checkout second +' + test_expect_success 'submodule <invalid-path> warns' ' git submodule no-such-submodule 2> output.err && diff --git a/unpack-trees.c b/unpack-trees.c index acdd311737..0ddbef3e63 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -67,8 +67,16 @@ static void unlink_entry(struct cache_entry *ce) { if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce))) return; - if (unlink_or_warn(ce->name)) - return; + if (S_ISGITLINK(ce->ce_mode)) { + if (rmdir(ce->name)) { + warning("unable to rmdir %s: %s", + ce->name, strerror(errno)); + return; + } + } + else + if (unlink_or_warn(ce->name)) + return; schedule_dir_for_removal(ce->name, ce_namelen(ce)); } |