mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
config: warn on inaccessible files
Before reading a config file, we check "!access(path, R_OK)" to make sure that the file exists and is readable. If it's not, then we silently ignore it. For the case of ENOENT, this is fine, as the presence of the file is optional. For other cases, though, it may indicate a configuration error (e.g., not having permissions to read the file). Let's print a warning in these cases to let the user know. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
889d35899b
commit
ba8bd8300a
@ -396,8 +396,8 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
||||
*/
|
||||
die("$HOME not set");
|
||||
|
||||
if (access(user_config, R_OK) &&
|
||||
xdg_config && !access(xdg_config, R_OK))
|
||||
if (access_or_warn(user_config, R_OK) &&
|
||||
xdg_config && !access_or_warn(xdg_config, R_OK))
|
||||
given_config_file = xdg_config;
|
||||
else
|
||||
given_config_file = user_config;
|
||||
|
10
config.c
10
config.c
@ -60,7 +60,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
|
||||
path = buf.buf;
|
||||
}
|
||||
|
||||
if (!access(path, R_OK)) {
|
||||
if (!access_or_warn(path, R_OK)) {
|
||||
if (++inc->depth > MAX_INCLUDE_DEPTH)
|
||||
die(include_depth_advice, MAX_INCLUDE_DEPTH, path,
|
||||
cf && cf->name ? cf->name : "the command line");
|
||||
@ -939,23 +939,23 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config)
|
||||
|
||||
home_config_paths(&user_config, &xdg_config, "config");
|
||||
|
||||
if (git_config_system() && !access(git_etc_gitconfig(), R_OK)) {
|
||||
if (git_config_system() && !access_or_warn(git_etc_gitconfig(), R_OK)) {
|
||||
ret += git_config_from_file(fn, git_etc_gitconfig(),
|
||||
data);
|
||||
found += 1;
|
||||
}
|
||||
|
||||
if (xdg_config && !access(xdg_config, R_OK)) {
|
||||
if (xdg_config && !access_or_warn(xdg_config, R_OK)) {
|
||||
ret += git_config_from_file(fn, xdg_config, data);
|
||||
found += 1;
|
||||
}
|
||||
|
||||
if (user_config && !access(user_config, R_OK)) {
|
||||
if (user_config && !access_or_warn(user_config, R_OK)) {
|
||||
ret += git_config_from_file(fn, user_config, data);
|
||||
found += 1;
|
||||
}
|
||||
|
||||
if (repo_config && !access(repo_config, R_OK)) {
|
||||
if (repo_config && !access_or_warn(repo_config, R_OK)) {
|
||||
ret += git_config_from_file(fn, repo_config, data);
|
||||
found += 1;
|
||||
}
|
||||
|
@ -604,6 +604,9 @@ 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. */
|
||||
int access_or_warn(const char *path, int mode);
|
||||
|
||||
/* Get the passwd entry for the UID of the current process. */
|
||||
struct passwd *xgetpwuid_self(void);
|
||||
|
||||
|
@ -403,6 +403,14 @@ int remove_or_warn(unsigned int mode, const char *file)
|
||||
return S_ISGITLINK(mode) ? rmdir_or_warn(file) : unlink_or_warn(file);
|
||||
}
|
||||
|
||||
int access_or_warn(const char *path, int mode)
|
||||
{
|
||||
int ret = access(path, mode);
|
||||
if (ret && errno != ENOENT)
|
||||
warning(_("unable to access '%s': %s"), path, strerror(errno));
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct passwd *xgetpwuid_self(void)
|
||||
{
|
||||
struct passwd *pw;
|
||||
|
Loading…
Reference in New Issue
Block a user