Only GIT_INDEX_FILE was cleared until now, but other environment variables have to be cleared too before running git status in a submodule. And while at it, don't allocate a new strbuf for GIT_INDEX_FILE but use a string constant instead. Signed-off-by: Jens Lehmann <Jens.Lehmann@xxxxxx> --- I think it makes sense to clear the same environment variables here as Giuseppe Bilotta's patch did for the git shell commands, even though i am not aware of any bug reports yet. submodule.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-) diff --git a/submodule.c b/submodule.c index 7d70c4f..f5707c2 100644 --- a/submodule.c +++ b/submodule.c @@ -130,7 +130,7 @@ int is_submodule_modified(const char *path) "--porcelain", NULL, }; - char *env[4]; + char *env[9]; struct strbuf buf = STRBUF_INIT; strbuf_addf(&buf, "%s/.git/", path); @@ -146,9 +146,17 @@ int is_submodule_modified(const char *path) env[0] = strbuf_detach(&buf, NULL); strbuf_addf(&buf, "GIT_DIR=%s/.git", path); env[1] = strbuf_detach(&buf, NULL); - strbuf_addf(&buf, "GIT_INDEX_FILE"); - env[2] = strbuf_detach(&buf, NULL); - env[3] = NULL; + /* + * Clear repo-local GIT_* environment variables (Also see + * clear_local_git_env() in git-sh-setup.sh) + */ + env[2] = "GIT_ALTERNATE_OBJECT_DIRECTORIES"; + env[3] = "GIT_CONFIG"; + env[4] = "GIT_GRAFT_FILE"; + env[5] = "GIT_INDEX_FILE"; + env[6] = "GIT_NO_REPLACE_OBJECTS"; + env[7] = "GIT_OBJECT_DIRECTORY"; + env[8] = NULL; memset(&cp, 0, sizeof(cp)); cp.argv = argv; @@ -167,7 +175,6 @@ int is_submodule_modified(const char *path) free(env[0]); free(env[1]); - free(env[2]); strbuf_release(&buf); return len != 0; } -- 1.7.0.199.g508d1.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html