git status: ignoring untracked files must apply to submodules too

Since 1.7.0 submodules are considered dirty when they contain untracked
files. But when git status is called with the "-uno" option, the user
asked to ignore untracked files, so they must be ignored in submodules
too. To achieve this, the new flag DIFF_OPT_IGNORE_UNTRACKED_IN_SUBMODULES
is introduced.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jens Lehmann
2010-03-13 23:00:27 +01:00
committed by Junio C Hamano
parent 85adbf2f75
commit 3bfc450476
6 changed files with 17 additions and 4 deletions

View File

@ -130,7 +130,7 @@ void show_submodule_summary(FILE *f, const char *path,
strbuf_release(&sb);
}
unsigned is_submodule_modified(const char *path)
unsigned is_submodule_modified(const char *path, int ignore_untracked)
{
int i;
ssize_t len;
@ -139,6 +139,7 @@ unsigned is_submodule_modified(const char *path)
"status",
"--porcelain",
NULL,
NULL,
};
const char *env[LOCAL_REPO_ENV_SIZE + 3];
struct strbuf buf = STRBUF_INIT;
@ -163,6 +164,9 @@ unsigned is_submodule_modified(const char *path)
env[i++] = strbuf_detach(&buf, NULL);
env[i] = NULL;
if (ignore_untracked)
argv[2] = "-uno";
memset(&cp, 0, sizeof(cp));
cp.argv = argv;
cp.env = env;
@ -181,7 +185,8 @@ unsigned is_submodule_modified(const char *path)
break;
} else {
dirty_submodule |= DIRTY_SUBMODULE_MODIFIED;
if (dirty_submodule & DIRTY_SUBMODULE_UNTRACKED)
if (ignore_untracked ||
(dirty_submodule & DIRTY_SUBMODULE_UNTRACKED))
break;
}
next_line = strchr(line, '\n');