When local process-to-process pipe transport spawns a subprocess, it cleans up various git related variables to give the new process a fresh environment. The list of variables to cleanse is useful in other places. --- cache.h | 2 ++ connect.c | 26 +++++++++++++++----------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/cache.h b/cache.h index 189151d..b72434f 100644 --- a/cache.h +++ b/cache.h @@ -389,6 +389,8 @@ extern void set_git_work_tree(const char *tree); #define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES" +extern const char *sanitize_git_env[]; + extern const char **get_pathspec(const char *prefix, const char **pathspec); extern void setup_work_tree(void); extern const char *setup_git_directory_gently(int *); diff --git a/connect.c b/connect.c index 2f23ab3..b4705ff 100644 --- a/connect.c +++ b/connect.c @@ -6,6 +6,20 @@ #include "run-command.h" #include "remote.h" +/* + * When spawning a subprocess in a fresh environment, + * these variables may need to be cleared + */ +const char *sanitize_git_env[] = { + ALTERNATE_DB_ENVIRONMENT, + DB_ENVIRONMENT, + GIT_DIR_ENVIRONMENT, + GIT_WORK_TREE_ENVIRONMENT, + GRAFT_ENVIRONMENT, + INDEX_ENVIRONMENT, + NULL +}; + static char *server_capabilities; static int check_ref(const char *name, int len, unsigned int flags) @@ -625,17 +639,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig, *arg++ = host; } else { - /* remove these from the environment */ - const char *env[] = { - ALTERNATE_DB_ENVIRONMENT, - DB_ENVIRONMENT, - GIT_DIR_ENVIRONMENT, - GIT_WORK_TREE_ENVIRONMENT, - GRAFT_ENVIRONMENT, - INDEX_ENVIRONMENT, - NULL - }; - conn->env = env; + conn->env = sanitize_git_env; *arg++ = "sh"; *arg++ = "-c"; } -- 1.6.2.rc2.99.g9f3bb -- 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