git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv5 5/5] is_submodule_modified(): clear environment properly

From
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date
Feb 24, 2010, 23:34 UTC
Message-ID
<1267054458-11877-6-git-send-email-giuseppe.bilotta@gmail.com>
In-Reply-To
<1267054458-11877-1-git-send-email-giuseppe.bilotta@gmail.com>

Rather than only clearing GIT_INDEX_FILE, take the list of environment variables to clear from local_repo_env, appending the settings for GIT_DIR and GIT_WORK_TREE.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
---
 submodule.c |   21 +++++++++++----------
 1 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/submodule.c b/submodule.c
index 7d70c4f..3c34d39 100644
--- a/submodule.c
+++ b/submodule.c
@@ -124,15 +124,19 @@ void show_submodule_summary(FILE *f, const char *path,
 int is_submodule_modified(const char *path)
 {
 	int len;
+	unsigned int i = 0;
 	struct child_process cp;
 	const char *argv[] = {
 		"status",
 		"--porcelain",
 		NULL,
 	};
-	char *env[4];
+	const char *env[local_repo_env_size+3];
 	struct strbuf buf = STRBUF_INIT;
 
+	for ( ; i < local_repo_env_size; ++i)
+		env[i] = local_repo_env[i];
+
 	strbuf_addf(&buf, "%s/.git/", path);
 	if (!is_directory(buf.buf)) {
 		strbuf_release(&buf);
@@ -143,16 +147,14 @@ int is_submodule_modified(const char *path)
 	strbuf_reset(&buf);
 
 	strbuf_addf(&buf, "GIT_WORK_TREE=%s", path);
-	env[0] = strbuf_detach(&buf, NULL);
+	env[i++] = 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;
+	env[i++] = strbuf_detach(&buf, NULL);
+	env[i] = NULL;
 
 	memset(&cp, 0, sizeof(cp));
 	cp.argv = argv;
-	cp.env = (const char *const *)env;
+	cp.env = env;
 	cp.git_cmd = 1;
 	cp.no_stdin = 1;
 	cp.out = -1;
@@ -165,9 +167,8 @@ int is_submodule_modified(const char *path)
 	if (finish_command(&cp))
 		die("git status --porcelain failed");
 
-	free(env[0]);
-	free(env[1]);
-	free(env[2]);
+	free((char *)env[--i]);
+	free((char *)env[--i]);
 	strbuf_release(&buf);
 	return len != 0;
 }
-- 
1.7.0.212.g5b851b.dirty
Previous: Giuseppe Bilotta
Message 7 of 7 in “[PATCHv5 0/5] repo-local env vars handling”
  1. Giuseppe BilottaFeb 24, 2010
  2. 1/5 Refactor list of of repo-local env varsGiuseppe Bilotta, Feb 24, 2010
  3. 2/5 rev-parse: --local-env-vars optionGiuseppe Bilotta, Feb 24, 2010
  4. Heiko VoigtFeb 27, 2010
  5. 3/5 shell setup: clear_local_git_env() functionGiuseppe Bilotta, Feb 24, 2010
  6. 4/5 submodules: ensure clean environment when operating in a submoduleGiuseppe Bilotta, Feb 24, 2010
  7. 5/5 is_submodule_modified(): clear environment properlyGiuseppe Bilotta, Feb 24, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.