• Jeff King's avatar
    run-command: treat inaccessible directories as ENOENT · 38f865c2
    Jeff King authored
    When execvp reports EACCES, it can be one of two things:
    
      1. We found a file to execute, but did not have
         permissions to do so.
    
      2. We did not have permissions to look in some directory
         in the $PATH.
    
    In the former case, we want to consider this a
    permissions problem and report it to the user as such (since
    getting this for something like "git foo" is likely a
    configuration error).
    
    In the latter case, there is a good chance that the
    inaccessible directory does not contain anything of
    interest. Reporting "permission denied" is confusing to the
    user (and prevents our usual "did you mean...?" lookup). It
    also prevents git from trying alias lookup, since we do so
    only when an external command does not exist (not when it
    exists but has an error).
    
    This patch detects EACCES from execvp, checks whether we are
    in case (2), and if so converts errno to ENOENT. This
    behavior matches that of "bash" (but not of simpler shells
    that use execvp more directly, like "dash").
    
    Test stolen from Junio.
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    38f865c2
exec_cmd.c 3.23 KB