It is a major reason to say no, when deciding if a submodule can be
deleted, if the git directory of the submodule being contained in the
submodule's working directory.

Migrate the git directory into the superproject instead of failing,
and proceed with the other checks.

Signed-off-by: Stefan Beller <[email protected]>
---
 submodule.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/submodule.c b/submodule.c
index 2d13744b06..e42efa2337 100644
--- a/submodule.c
+++ b/submodule.c
@@ -1026,11 +1026,22 @@ int ok_to_remove_submodule(const char *path, unsigned 
flags)
        struct strbuf buf = STRBUF_INIT;
        int ok_to_remove = 1;
 
+       /* Is it there? */
        if (!file_exists(path) || is_empty_dir(path))
                return 1;
 
-       if (!submodule_uses_gitfile(path))
-               return 0;
+       /* Does it have a .git directory? */
+       if (!submodule_uses_gitfile(path)) {
+               absorb_git_dir_into_superproject("", path,
+                       ABSORB_GITDIR_RECURSE_SUBMODULES);
+
+               /*
+                * We should be using a gitfile by now. Let's double
+                * check as losing the git dir would be fatal.
+                */
+               if (!submodule_uses_gitfile(path))
+                       return 0;
+       }
 
        argv_array_pushl(&cp.args, "status", "--porcelain",
                                   "--ignore-submodules=none", NULL);
-- 
2.11.0.rc2.35.g26e18c9

Reply via email to