Skip to content

Commit 3b2885e

Browse files
Peter Kaestlegitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent ace912b commit 3b2885e

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

builtin/submodule--helper.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,8 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
781781
struct argv_array diff_files_args = ARGV_ARRAY_INIT;
782782
struct rev_info rev;
783783
int diff_files_result;
784+
struct strbuf buf = STRBUF_INIT;
785+
const char *git_dir;
784786

785787
if (!submodule_from_path(the_repository, &null_oid, path))
786788
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,
793795
goto cleanup;
794796
}
795797

796-
if (!is_submodule_active(the_repository, path)) {
798+
strbuf_addf(&buf, "%s/.git", path);
799+
git_dir = read_gitfile(buf.buf);
800+
if (!git_dir)
801+
git_dir = buf.buf;
802+
803+
if (!is_submodule_active(the_repository, path) ||
804+
!is_git_directory(git_dir)) {
797805
print_status(flags, '-', path, ce_oid, displaypath);
806+
strbuf_release(&buf);
798807
goto cleanup;
799808
}
809+
strbuf_release(&buf);
800810

801811
argv_array_pushl(&diff_files_args, "diff-files",
802812
"--ignore-submodules=dirty", "--quiet", "--",

t/t7400-submodule-basic.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ test_expect_success 'init should register submodule url in .git/config' '
377377
test_cmp expect url
378378
'
379379

380-
test_expect_failure 'status should still be "missing" after initializing' '
380+
test_expect_success 'status should still be "missing" after initializing' '
381381
rm -fr init &&
382382
mkdir init &&
383383
git submodule status >lines &&

0 commit comments

Comments
 (0)