run-command.c: ignore bad permissions on dirs in PATH
PATCH 1/1 run-command.c: ignore bad permissions on dirs in PATH
All of my git aliases stopped working one day. For example, when I ran 'git ci' (where 'ci' is an alias for 'commit') it printed out this error:
fatal: cannot exec 'git-ci': Permission denied
This error was confusing (I didn't have a 'git-ci' executable anywhere, so why was it complaining about permissions?) and it took me a while to figure out that this was happening because I happened to have a random directory in my PATH that had permissions set incorrectly. Git should probably ignore this, and here is one way to fix it, although I'm not sure if it's the best way.
--- run-command.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
run-command.c +1 -1
@@ -284,7 +284,7 @@ fail_pipe:* Do not check for cmd->silent_exec_failure; the parent * process will check it when it sees this exit code. */ -if (errno ==ENOENT ) +if (errno ==ENOENT || errno ==EACCES )exit (127 );else die_errno ("cannot exec '%s'" , cmd->argv[0 ]);
Signature · 1 line
1.7.1.226.g770c5.dirty
Quoted 10 lines · Dale Rowley
All of my git aliases stopped working one day. For example, when I ran 'git ci' (where 'ci' is an alias for 'commit') it printed out this error:
fatal: cannot exec 'git-ci': Permission denied
This error was confusing (I didn't have a 'git-ci' executable anywhere, so why was it complaining about permissions?) and it took me a while to figure out that this was happening because I happened to have a random directory in my PATH that had permissions set incorrectly. Git should probably ignore this, and here is one way to fix it, although I'm not sure if it's the best way.
As long as the issue is "a directory P on PATH is unreadable, and we tried to see if P/git-ci is executable and reported failure by exiting", I think your patch is a reasonable solution.
Thanks
Am 5/25/2010 7:34, schrieb Junio C Hamano:
Quoted 13 lines
Quoted 10 lines · Dale Rowley
All of my git aliases stopped working one day. For example, when I ran 'git ci' (where 'ci' is an alias for 'commit') it printed out this error:
fatal: cannot exec 'git-ci': Permission denied
This error was confusing (I didn't have a 'git-ci' executable anywhere, so why was it complaining about permissions?) and it took me a while to figure out that this was happening because I happened to have a random directory in my PATH that had permissions set incorrectly. Git should probably ignore this, and here is one way to fix it, although I'm not sure if it's the best way.
Quoted 3 lines
As long as the issue is "a directory P on PATH is unreadable, and we tried to see if P/git-ci is executable and reported failure by exiting", I think your patch is a reasonable solution.
But it is not only about an unreadable directory. EACCES is also returned when a "git command" is found that does not have execute permission:
$ touch ~/bin/git-frob # ~/bin is in $PATH $ git frob # original git fatal: cannot exec 'git-frob': Permission denied $ ./git frob # patched git WARNING: You called a Git command named 'frob', which does not exist. Continuing under the assumption that you meant 'ambox' in 11.0 seconds automatically...
That is, when you write a new git command and forget to set execute permission, you lose the "Permission denied" error. (Ditto if you accidentally remove execute permission from an existing external git command.)
The question is which corner case is more important to cater for.
I don't have an idea how to solve both issues short of doing the PATH lookup manually.
-- Hannes
Quoted 3 lines
That is, when you write a new git command and forget to set execute permission, you lose the "Permission denied" error. (Ditto if you accidentally remove execute permission from an existing external git command.)
True, but after getting the warning that 'git-frob' doesn't exist, it would probably only take a minute to figure out that 'git-frob' permissions need to be fixed, and then it's understandable why git choked on it. In contrast, it took me a while to discover my PATH permissions problem, and even then it wasn't clear why git should die because of a permissions problem on a directory that had little to do with git.
Dale