Currently a "submodule deinit" run on a non-populated submodule will still
print the "Cleared directory" message even though the directory is already
empty. While that is technically correct (as the directory is removed and
created again), it is rather surprising to see this message for an empty
submodule directory where nothing is to be cleared.

Fix that by using 'test ! -d "$(find "$sm_path" -maxdepth 0 -empty)"' to
test for the directory being not empty before removing and recreating it.

Thanks-to: Phil Hord <phil.h...@gmail.com>
Signed-off-by: Jens Lehmann <jens.lehm...@web.de>
---

Am 16.04.2013 15:32, schrieb Phil Hord:
> On Mon, Apr 1, 2013 at 3:02 PM, Jens Lehmann <jens.lehm...@web.de> wrote:
>> Okay, so here is the patch for that. If someone could point out
>> a portable and efficient way to check if a directory is already
>> empty I would be happy to use that to silence the "Cleaned
>> directory" message currently printed also when deinit is run on
>> an already empty directory.
> 
>    isemptydir() {
>         test -d "$(find $1 -maxdepth 0 -empty)"
>    }
> 
> Sorry for the late reply.  I see this patch is already in master
> (which is fine with me).

Thanks, I managed to miss that solution when googling for it.


 git-submodule.sh           | 35 +++++++++++++++++++----------------
 t/t7400-submodule-basic.sh |  8 ++++----
 2 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 79bfaac..52ecbf1 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -594,27 +594,30 @@ cmd_deinit()
                die_if_unmatched "$mode"
                name=$(module_name "$sm_path") || exit

-               # Remove the submodule work tree (unless the user already did 
it)
-               if test -d "$sm_path"
+               # Remove the submodule work tree (unless the user already did 
it or it is empty)
+               if test ! -d "$(find "$sm_path" -maxdepth 0 -empty)"
                then
-                       # Protect submodules containing a .git directory
-                       if test -d "$sm_path/.git"
+                       if test -d "$sm_path"
                        then
-                               echo >&2 "$(eval_gettext "Submodule work tree 
'\$sm_path' contains a .git directory")"
-                               die "$(eval_gettext "(use 'rm -rf' if you 
really want to remove it including all of its history)")"
-                       fi
+                               # Protect submodules containing a .git directory
+                               if test -d "$sm_path/.git"
+                               then
+                                       echo >&2 "$(eval_gettext "Submodule 
work tree '\$sm_path' contains a .git directory")"
+                                       die "$(eval_gettext "(use 'rm -rf' if 
you really want to remove it including all of its history)")"
+                               fi

-                       if test -z "$force"
-                       then
-                               git rm -qn "$sm_path" ||
-                               die "$(eval_gettext "Submodule work tree 
'\$sm_path' contains local modifications; use '-f' to discard them")"
+                               if test -z "$force"
+                               then
+                                       git rm -qn "$sm_path" ||
+                                       die "$(eval_gettext "Submodule work 
tree '\$sm_path' contains local modifications; use '-f' to discard them")"
+                               fi
+                               rm -rf "$sm_path" &&
+                               say "$(eval_gettext "Cleared directory 
'\$sm_path'")" ||
+                               say "$(eval_gettext "Could not remove submodule 
work tree '\$sm_path'")"
                        fi
-                       rm -rf "$sm_path" &&
-                       say "$(eval_gettext "Cleared directory '\$sm_path'")" ||
-                       say "$(eval_gettext "Could not remove submodule work 
tree '\$sm_path'")"
-               fi

-               mkdir "$sm_path" || say "$(eval_gettext "Could not create empty 
submodule directory '\$sm_path'")"
+                       mkdir "$sm_path" || say "$(eval_gettext "Could not 
create empty submodule directory '\$sm_path'")"
+               fi

                # Remove the .git/config entries (unless the user already did 
it)
                if test -n "$(git config --get-regexp submodule."$name\.")"
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index ff26535..b56e4a5 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -792,7 +792,7 @@ test_expect_success 'submodule deinit deinits a submodule 
when its work tree is
        test -z "$(git config --get-regexp "submodule\.example\.")" &&
        test -z "$(git config --get-regexp "submodule\.example2\.")" &&
        test_i18ngrep ! "Cleared directory .init" actual &&
-       test_i18ngrep "Cleared directory .example2" actual &&
+       test_i18ngrep ! "Cleared directory .example2" actual &&
        rmdir init
 '

@@ -842,15 +842,15 @@ test_expect_success 'submodule deinit is silent when used 
on an uninitialized su
        test_i18ngrep "Cleared directory .init" actual &&
        git submodule deinit init >actual &&
        test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" 
actual &&
-       test_i18ngrep "Cleared directory .init" actual &&
+       test_i18ngrep ! "Cleared directory .init" actual &&
        git submodule deinit . >actual &&
        test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" 
actual &&
        test_i18ngrep "Submodule .example2. (.*) unregistered for path 
.example2" actual &&
-       test_i18ngrep "Cleared directory .init" actual &&
+       test_i18ngrep ! "Cleared directory .init" actual &&
        git submodule deinit . >actual &&
        test_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" 
actual &&
        test_i18ngrep ! "Submodule .example2. (.*) unregistered for path 
.example2" actual &&
-       test_i18ngrep "Cleared directory .init" actual &&
+       test_i18ngrep ! "Cleared directory .init" actual &&
        rmdir init example2
 '

-- 
1.8.2.1.419.g33f67ba


--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to