aboutsummaryrefslogtreecommitdiff
path: root/submodule.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-03-08 00:36:02 -0800
committerJunio C Hamano <gitster@pobox.com>2010-03-08 00:36:02 -0800
commitbd08ecc487f3b515196cc4096094799a02de6ae3 (patch)
tree920218f73799f6dffcbd1b3bb0d4e878fa449c29 /submodule.c
parent030bc0aa8b012170b69f40f95b152a1080447301 (diff)
parent5ce9086ddfe6931ef34fcd99778c9235e2ee1839 (diff)
downloadgit-bd08ecc487f3b515196cc4096094799a02de6ae3.tar.gz
git-bd08ecc487f3b515196cc4096094799a02de6ae3.tar.xz
Merge branch 'gb/maint-submodule-env' into maint
* gb/maint-submodule-env: is_submodule_modified(): clear environment properly submodules: ensure clean environment when operating in a submodule shell setup: clear_local_git_env() function rev-parse: --local-env-vars option Refactor list of of repo-local env vars
Diffstat (limited to 'submodule.c')
-rw-r--r--submodule.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/submodule.c b/submodule.c
index 7d70c4f7b..5d286e409 100644
--- a/submodule.c
+++ b/submodule.c
@@ -123,16 +123,19 @@ void show_submodule_summary(FILE *f, const char *path,
int is_submodule_modified(const char *path)
{
- int len;
+ int len, i;
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 = 0; 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 +146,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 +166,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]);
+ for (i = LOCAL_REPO_ENV_SIZE; env[i]; i++)
+ free((char *)env[i]);
strbuf_release(&buf);
return len != 0;
}