зеркало из https://github.com/microsoft/git.git
Merge branch 'jn/warn-on-inaccessible-loosen'
Deal with a situation where .config/git is a file and we notice .config/git/config is not readable due to ENOTDIR, not ENOENT. * jn/warn-on-inaccessible-loosen: config: exit on error accessing any config file doc: advertise GIT_CONFIG_NOSYSTEM config: treat user and xdg config permission problems as errors config, gitignore: failure to access with ENOTDIR is ok
This commit is contained in:
Коммит
4f43e9726a
|
@ -240,6 +240,10 @@ GIT_CONFIG::
|
|||
Using the "--global" option forces this to ~/.gitconfig. Using the
|
||||
"--system" option forces this to $(prefix)/etc/gitconfig.
|
||||
|
||||
GIT_CONFIG_NOSYSTEM::
|
||||
Whether to skip reading settings from the system-wide
|
||||
$(prefix)/etc/gitconfig file. See linkgit:git[1] for details.
|
||||
|
||||
See also <<FILES>>.
|
||||
|
||||
|
||||
|
|
|
@ -777,6 +777,14 @@ for further details.
|
|||
and read the password from its STDOUT. See also the 'core.askpass'
|
||||
option in linkgit:git-config[1].
|
||||
|
||||
'GIT_CONFIG_NOSYSTEM'::
|
||||
Whether to skip reading settings from the system-wide
|
||||
`$(prefix)/etc/gitconfig` file. This environment variable can
|
||||
be used along with `$HOME` and `$XDG_CONFIG_HOME` to create a
|
||||
predictable environment for a picky script, or you can set it
|
||||
temporarily to avoid using a buggy `/etc/gitconfig` file while
|
||||
waiting for someone with sufficient permissions to fix it.
|
||||
|
||||
'GIT_FLUSH'::
|
||||
If this environment variable is set to "1", then commands such
|
||||
as 'git blame' (in incremental mode), 'git rev-list', 'git log',
|
||||
|
|
10
config.c
10
config.c
|
@ -58,7 +58,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
|
|||
path = buf.buf;
|
||||
}
|
||||
|
||||
if (!access_or_warn(path, R_OK)) {
|
||||
if (!access_or_die(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");
|
||||
|
@ -940,23 +940,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_or_warn(git_etc_gitconfig(), R_OK)) {
|
||||
if (git_config_system() && !access_or_die(git_etc_gitconfig(), R_OK)) {
|
||||
ret += git_config_from_file(fn, git_etc_gitconfig(),
|
||||
data);
|
||||
found += 1;
|
||||
}
|
||||
|
||||
if (xdg_config && !access_or_warn(xdg_config, R_OK)) {
|
||||
if (xdg_config && !access_or_die(xdg_config, R_OK)) {
|
||||
ret += git_config_from_file(fn, xdg_config, data);
|
||||
found += 1;
|
||||
}
|
||||
|
||||
if (user_config && !access_or_warn(user_config, R_OK)) {
|
||||
if (user_config && !access_or_die(user_config, R_OK)) {
|
||||
ret += git_config_from_file(fn, user_config, data);
|
||||
found += 1;
|
||||
}
|
||||
|
||||
if (repo_config && !access_or_warn(repo_config, R_OK)) {
|
||||
if (repo_config && !access_or_die(repo_config, R_OK)) {
|
||||
ret += git_config_from_file(fn, repo_config, data);
|
||||
found += 1;
|
||||
}
|
||||
|
|
|
@ -654,8 +654,12 @@ 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);
|
||||
int access_or_die(const char *path, int mode);
|
||||
|
||||
/* Warn on an inaccessible file that ought to be accessible */
|
||||
void warn_on_inaccessible(const char *path);
|
||||
|
|
10
wrapper.c
10
wrapper.c
|
@ -411,11 +411,19 @@ 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;
|
||||
}
|
||||
|
||||
int access_or_die(const char *path, int mode)
|
||||
{
|
||||
int ret = access(path, mode);
|
||||
if (ret && errno != ENOENT && errno != ENOTDIR)
|
||||
die_errno(_("unable to access '%s'"), path);
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct passwd *xgetpwuid_self(void)
|
||||
{
|
||||
struct passwd *pw;
|
||||
|
|
Загрузка…
Ссылка в новой задаче