From ae2a38271f778522ceb9182b94e0024a816e3338 Mon Sep 17 00:00:00 2001 From: Eric Sunshine Date: Fri, 17 Jul 2015 19:00:11 -0400 Subject: worktree: elucidate environment variables intended for child processes Take advantage of 'struct child_process.env' to make it obvious that environment variables set by add_worktree() are intended specifically for sub-commands it invokes to operate in the new worktree. We assign a local 'struct argv_array' to child_process.env, rather than utilizing the child_process.env_array 'struct argv_array', because future patches will make add_worktree() invoke additional sub-commands, and it's simpler to populate the environment array just once, whereas child_process.env_array gets cleared after each invocation, thus would require re-population for each sub-command. Signed-off-by: Eric Sunshine Signed-off-by: Junio C Hamano diff --git a/builtin/worktree.c b/builtin/worktree.c index 8225468..7bd6f17 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -186,6 +186,7 @@ static int add_worktree(const char *path, const char **child_argv, const char *name; struct stat st; struct child_process cp; + struct argv_array child_env = ARGV_ARRAY_INIT; int counter = 0, len, ret; unsigned char rev[20]; @@ -256,11 +257,12 @@ static int add_worktree(const char *path, const char **child_argv, fprintf_ln(stderr, _("Preparing %s (identifier %s)"), path, name); setenv("GIT_CHECKOUT_NEW_WORKTREE", "1", 1); - setenv(GIT_DIR_ENVIRONMENT, sb_git.buf, 1); - setenv(GIT_WORK_TREE_ENVIRONMENT, path, 1); + argv_array_pushf(&child_env, "%s=%s", GIT_DIR_ENVIRONMENT, sb_git.buf); + argv_array_pushf(&child_env, "%s=%s", GIT_WORK_TREE_ENVIRONMENT, path); memset(&cp, 0, sizeof(cp)); cp.git_cmd = 1; cp.argv = child_argv; + cp.env = child_env.argv; ret = run_command(&cp); if (!ret) { is_junk = 0; @@ -272,6 +274,7 @@ static int add_worktree(const char *path, const char **child_argv, strbuf_reset(&sb); strbuf_addf(&sb, "%s/locked", sb_repo.buf); unlink_or_warn(sb.buf); + argv_array_clear(&child_env); strbuf_release(&sb); strbuf_release(&sb_repo); strbuf_release(&sb_git); -- cgit v0.10.2-6-g49f6