Re: [PATCH] allow setting GIT_WORK_TREE to "no work tree"
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Feb 7, 2008, 19:02 UTC
- Message-ID
- <alpine.LSU.1.00.0802071855550.8543@racer.site>
- In-Reply-To
- <47A98F07.4000402@viscovery.net>
Hi,
On Wed, 6 Feb 2008, Johannes Sixt wrote:
Show 24 quoted lines
> Jeff King schrieb: > > In setup_git_directory_gently, we have a special rule that says "if > > GIT_DIR is set but GIT_WORK_TREE is not, then use the current working > > directory as the work tree." This is the intended behavior for the > > user perspective. > > > > However, setup_git_directory_gently sets GIT_DIR itself, meaning that > > further setups (either because we are executing a command via alias, > > or in a subprocess) will see the non-existent GIT_WORK_TREE and assume > > we fall into the "current working directory is the working tree" > > codepath. > > > > Instead, we now use a special value of GIT_WORK_TREE to indicate that > > we have already checked for a worktree and that there isn't one, > > setting it when we set GIT_DIR and checking for it in the special case > > path. > > > > The special value is a blank GIT_WORK_TREE; it could be any value, but > > this should not conflict with any user values (and as a bonus, you can > > now tell git "I don't have a work tree" with "GIT_WORK_TREE= git", > > though I suspect the use case for that is limited). > > Hrm. Unfortunately, on Windows there is no such thing as an empty > environment string. setenv(x, "") *removes* the environment variable.
That might be a shortcoming of our implementation of setenv():
-- snip -- cd /git
cat > a1.c << EOF #include <stdio.h> #include "compat/setenv.c" #include "compat/unsetenv.c"
static void p()
{
const char *abc = getenv("ABC");
printf("env ABC: %s\n", abc ? abc : "(null)");
}int main()
{
p();
gitsetenv("ABC", "Hello", 1);
p();
gitsetenv("ABC", "", 1);
p();
gitunsetenv("ABC");
p();
return 0;
}
EOFgcc -DNO_MMAP=1 -I. -Icompat -o a1.exe a1.c
ABC="" ./a1.exe -- snap --
This will show
env ABC: env ABC: Hello env ABC: (null) env ABC: (null)
So it seems that environment variables _can_ be empty. Just our relatively stupid implementation of setenv() does not do it.
Maybe something like compat/unsetenv.c is needed in setenv(), too.
Ciao, Dscho