Re: [PATCH 2/2] git: continue alias lookup on EACCES errors
- From
Jeff King <peff@peff.net>
- Date
- Mar 28, 2012, 22:07 UTC
- Message-ID
- <20120328220731.GC10795@sigill.intra.peff.net>
- In-Reply-To
- <20120328215704.GB10795@sigill.intra.peff.net>
On Wed, Mar 28, 2012 at 05:57:04PM -0400, Jeff King wrote:
Show 7 quoted lines
> +static int exists_in_PATH(const char *file)
> +{
> + const char *p = getenv("PATH");
> + struct strbuf buf = STRBUF_INIT;
> +
> + if (!p || !*p)
> + return 0;One thing to note: real execvp, when it sees a NULL $PATH, will fill in some OS-dependent default path. My linux box has _PATH_DEFPATH, but I don't know how portable that is (I can't find anything useful in POSIX).
> No tests yet. I'll post some output on that in a minute.
So here is a quick test script to show the output for a couple different cases. Should this be a real test script? A lot of what is being tested is the actual stderr output in many cases, which we tend to try not to include in tests.
-- >8 -- #!/bin/sh
rm -rf bin .git
# bin/broken is a PATH directory that cannot be searched # bin/ok can be searched, but has a broken entry mkdir bin bin/broken bin/ok chmod -x bin/broken
# The "yes" command lets us know when things are working. cat >bin/ok/git-yes <<\EOF #!/bin/sh echo yes EOF chmod +x bin/ok/git-yes
# and the "no" command is broken, and should be reported as EACCES >bin/ok/git-no
git init -q git config alias.alias-yes yes git config alias.alias-no no
PATH=$PWD/bin/broken:$PWD/bin/ok:$PATH
set -x git does-not-exist git yes git no git alias-yes git alias-no
-- >8 --
The output I get is:
# stock git + git does-not-exist fatal: cannot exec 'git-does-not-exist': Permission denied + git yes yes + git no fatal: cannot exec 'git-no': Permission denied + git alias-yes fatal: cannot exec 'git-alias-yes': Permission denied + git alias-no fatal: cannot exec 'git-alias-no': Permission denied
# my earlier patches to do alias lookup after EACCES + git does-not-exist Failed to run command 'does-not-exist': Permission denied + git yes yes + git no Failed to run command 'no': Permission denied + git alias-yes yes + git alias-no Expansion of alias 'alias-no' failed; 'no': Permission denied
# this patch + git does-not-exist git: 'does-not-exist' is not a git command. See 'git --help'. + git yes yes + git no fatal: cannot exec 'git-no': Permission denied + git alias-yes yes + git alias-no fatal: cannot exec 'git-no': Permission denied
-Peff