submodule: fix status of initialized but not cloned submodules

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>
This commit is contained in:
Peter Kaestle 2020-01-24 11:34:04 +01:00 committed by Junio C Hamano
parent ace912bfb8
commit 3b2885ec9b
2 changed files with 12 additions and 2 deletions

View 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", "--",

View File

@ -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 &&