[PATCH] Fix submodule status of dirs initialized but empty
- From
- Peter Kästle <peter.kaestle@nokia.com>
- Date
- Jan 14, 2020, 14:02 UTC
- Message-ID
- <23e3d410-5271-a919-aa03-9e776cf72f7c@nokia.com>
Fix submodule status of dirs initialized but empty
Original bash helper for "submodule status" was doing a check for initialized but not cloned submodules and prefixed them with "-" in case .git was missing inside the submodule directory. This check was skipped when originally porting the functionality from bash to C.
Signed-off-by: Peter Kaestle <peter.kaestle@nokia.com> --- builtin/submodule--helper.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index c72931e..50bb692 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -782,6 +782,9 @@ 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,11 +796,19 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, print_status(flags, 'U', path, &null_oid, displaypath); 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", "--",
-- 1.7.1