From: Junio C Hamano Date: Fri, 20 Jan 2006 01:13:06 GMT Subject: Re: [PATCH] local push/pull env cleanup Message-ID: <7vhd7z8zx9.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <20060119205803.308.78669.stgit@della.draisey.ca> Matt Draisey writes: > From: Matt Draisey > > remove environment variables relating to the current repository > before execing the 'remote' half of a local push or pull operation > --- > > connect.c | 7 ++++++- > 1 files changed, 6 insertions(+), 1 deletions(-) > > diff --git a/connect.c b/connect.c > index d6f4e4c..50cc879 100644 > --- a/connect.c > +++ b/connect.c > @@ -644,8 +644,13 @@ int git_connect(int fd[2], char *url, co > ssh_basename++; > execlp(ssh, ssh_basename, host, command, NULL); > } > - else > + else { > + unsetenv("GIT_DIR"); > + unsetenv("GIT_INDEX_FILE"); > + unsetenv("GIT_OBJECT_DIRECTORY"); > + unsetenv("GIT_ALTERNATE_OBJECT_DIRECTORIES"); > execlp("sh", "sh", "-c", command, NULL); > + } > die("exec failed"); > } > fd[0] = pipefd[0][0]; There are platforms that lack unsetenv(3C), so you also need an emulation similar to what we do for setenv(3) in compat/setenv.c. I suspect GIT_DIR is automatically set up by enter_repo on the other side when upload-pack (for fetch case) or receive-pack (for push case) is run, so that may not be necessary, but cleaning it along with others here sounds sane, even if only for consistency's sake.