[PATCH 1/2] config, gitignore: failure to access with ENOTDIR is ok
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Oct 14, 2012, 00:03 UTC
- Message-ID
- <20121014000307.GA11399@elie.Belkin>
- In-Reply-To
- <20121014000210.GA19094@elie.Belkin>
The access_or_warn() function is used to check for optional configuration files like .gitconfig and .gitignore and warn when they are not accessible due to a configuration issue (e.g., bad permissions). It is not supposed to complain when a file is simply missing.
Noticed on a system where ~/.config/git was a file --- when the new XDG_CONFIG_HOME support looks for ~/.config/git/config it should ignore ~/.config/git instead of printing irritating warnings:
$ git status -s warning: unable to access '/home/jrn/.config/git/config': Not a directory warning: unable to access '/home/jrn/.config/git/config': Not a directory warning: unable to access '/home/jrn/.config/git/config': Not a directory warning: unable to access '/home/jrn/.config/git/config': Not a directory
Compare v1.7.12.1~2^2 (attr:failure to open a .gitattributes file is OK with ENOTDIR, 2012-09-13).
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> --- git-compat-util.h | 5 ++++- wrapper.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/git-compat-util.h b/git-compat-util.h index 2fbf1fd8..f567767f 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -635,7 +635,10 @@ int rmdir_or_warn(const char *path); */ int remove_or_warn(unsigned int mode, const char *path); -/* Call access(2), but warn for any error besides ENOENT. */ +/* + * Call access(2), but warn for any error except "missing file" + * (ENOENT or ENOTDIR). + */ int access_or_warn(const char *path, int mode); /* Warn on an inaccessible file that ought to be accessible */ diff --git a/wrapper.c b/wrapper.c index 68739aaa..c1b919f3 100644 --- a/wrapper.c +++ b/wrapper.c @@ -411,7 +411,7 @@ void warn_on_inaccessible(const char *path) int access_or_warn(const char *path, int mode) { int ret = access(path, mode); - if (ret && errno != ENOENT) + if (ret && errno != ENOENT && errno != ENOTDIR) warn_on_inaccessible(path); return ret; }
-- 1.8.0.rc2