]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule: fix status of initialized but not cloned submodules
authorPeter Kaestle <peter.kaestle@nokia.com>
Fri, 24 Jan 2020 10:34:04 +0000 (11:34 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 27 Jan 2020 18:14:00 +0000 (10:14 -0800)
Original bash helper for "submodule status" was doing a check for
initialized but not cloned submodules and prefixed the status with
a minus sign in case no .git file or folder was found inside the
submodule directory.

This check was missed when the original port of the functionality
from bash to C was done.

Signed-off-by: Peter Kaestle <peter.kaestle@nokia.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/submodule--helper.c
t/t7400-submodule-basic.sh

index ad8df0d4716bbe39c70b7a8326a3bb85a4fbb4b1..ecec9378cb20aaf7c9162342911e7a6960b9af43 100644 (file)
@@ -781,6 +781,8 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
        struct argv_array diff_files_args = ARGV_ARRAY_INIT;
        struct rev_info rev;
        int diff_files_result;
+       struct strbuf buf = STRBUF_INIT;
+       const char *git_dir;
 
        if (!submodule_from_path(the_repository, &null_oid, path))
                die(_("no submodule mapping found in .gitmodules for path '%s'"),
@@ -793,10 +795,18 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
                goto cleanup;
        }
 
-       if (!is_submodule_active(the_repository, path)) {
+       strbuf_addf(&buf, "%s/.git", path);
+       git_dir = read_gitfile(buf.buf);
+       if (!git_dir)
+               git_dir = buf.buf;
+
+       if (!is_submodule_active(the_repository, path) ||
+           !is_git_directory(git_dir)) {
                print_status(flags, '-', path, ce_oid, displaypath);
+               strbuf_release(&buf);
                goto cleanup;
        }
+       strbuf_release(&buf);
 
        argv_array_pushl(&diff_files_args, "diff-files",
                         "--ignore-submodules=dirty", "--quiet", "--",
index 5c9acb80afe77a249f51cc5306314b65ea187a20..86b424f6348953467ab81974cea7afc20dbb54cc 100755 (executable)
@@ -377,7 +377,7 @@ test_expect_success 'init should register submodule url in .git/config' '
        test_cmp expect url
 '
 
-test_expect_failure 'status should still be "missing" after initializing' '
+test_expect_success 'status should still be "missing" after initializing' '
        rm -fr init &&
        mkdir init &&
        git submodule status >lines &&