mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-12 12:00:29 +00:00
Correctly read xdr compatible %HOME%/.config/git/config config file
This file is not just read if the global config file (%HOME%/.gitconfig) is not found, however, it is used everytime but with lower priority. Signed-off-by: Sven Strickroth <email@cs-ware.de>
This commit is contained in:
parent
6605f51d81
commit
8b4f9b1758
@ -61,12 +61,32 @@ typedef struct {
|
|||||||
* may be used on any `git_config` call to load the
|
* may be used on any `git_config` call to load the
|
||||||
* global configuration file.
|
* global configuration file.
|
||||||
*
|
*
|
||||||
|
* This method will not guess the path to the xdr compatible
|
||||||
|
* config file (.config/git/config).
|
||||||
|
*
|
||||||
* @param global_config_path Buffer of GIT_PATH_MAX length to store the path
|
* @param global_config_path Buffer of GIT_PATH_MAX length to store the path
|
||||||
* @return 0 if a global configuration file has been
|
* @return 0 if a global configuration file has been
|
||||||
* found. Its path will be stored in `buffer`.
|
* found. Its path will be stored in `buffer`.
|
||||||
*/
|
*/
|
||||||
GIT_EXTERN(int) git_config_find_global(char *global_config_path, size_t length);
|
GIT_EXTERN(int) git_config_find_global(char *global_config_path, size_t length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Locate the path to the global xdr compatible configuration file
|
||||||
|
*
|
||||||
|
* The xdr compatible configuration file is usually
|
||||||
|
* located in `$HOME/.config/git/config`.
|
||||||
|
*
|
||||||
|
* This method will try to guess the full path to that
|
||||||
|
* file, if the file exists. The returned path
|
||||||
|
* may be used on any `git_config` call to load the
|
||||||
|
* global configuration file.
|
||||||
|
*
|
||||||
|
* @param global_config_path Buffer of GIT_PATH_MAX length to store the path
|
||||||
|
* @return 0 if a global configuration file has been
|
||||||
|
* found. Its path will be stored in `buffer`.
|
||||||
|
*/
|
||||||
|
GIT_EXTERN(int) git_config_find_xdr(char *global_config_path, size_t length);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Locate the path to the system configuration file
|
* Locate the path to the system configuration file
|
||||||
*
|
*
|
||||||
|
@ -451,8 +451,12 @@ int git_config_find_global_r(git_buf *path)
|
|||||||
{
|
{
|
||||||
int error = git_futils_find_global_file(path, GIT_CONFIG_FILENAME);
|
int error = git_futils_find_global_file(path, GIT_CONFIG_FILENAME);
|
||||||
|
|
||||||
if (error == GIT_ENOTFOUND)
|
return error;
|
||||||
error = git_futils_find_global_file(path, GIT_CONFIG_FILENAME_ALT);
|
}
|
||||||
|
|
||||||
|
int git_config_find_xdr_r(git_buf *path)
|
||||||
|
{
|
||||||
|
int error = git_futils_find_global_file(path, GIT_CONFIG_FILENAME_ALT);
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -445,6 +445,7 @@ static int load_config(
|
|||||||
git_config **out,
|
git_config **out,
|
||||||
git_repository *repo,
|
git_repository *repo,
|
||||||
const char *global_config_path,
|
const char *global_config_path,
|
||||||
|
const char *xdr_config_path,
|
||||||
const char *system_config_path)
|
const char *system_config_path)
|
||||||
{
|
{
|
||||||
git_buf config_path = GIT_BUF_INIT;
|
git_buf config_path = GIT_BUF_INIT;
|
||||||
@ -459,13 +460,18 @@ static int load_config(
|
|||||||
&config_path, repo->path_repository, GIT_CONFIG_FILENAME_INREPO) < 0)
|
&config_path, repo->path_repository, GIT_CONFIG_FILENAME_INREPO) < 0)
|
||||||
goto on_error;
|
goto on_error;
|
||||||
|
|
||||||
if (git_config_add_file_ondisk(cfg, config_path.ptr, 3) < 0)
|
if (git_config_add_file_ondisk(cfg, config_path.ptr, 4) < 0)
|
||||||
goto on_error;
|
goto on_error;
|
||||||
|
|
||||||
git_buf_free(&config_path);
|
git_buf_free(&config_path);
|
||||||
|
|
||||||
if (global_config_path != NULL) {
|
if (global_config_path != NULL) {
|
||||||
if (git_config_add_file_ondisk(cfg, global_config_path, 2) < 0)
|
if (git_config_add_file_ondisk(cfg, global_config_path, 3) < 0)
|
||||||
|
goto on_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xdr_config_path != NULL) {
|
||||||
|
if (git_config_add_file_ondisk(cfg, xdr_config_path, 3) < 0)
|
||||||
goto on_error;
|
goto on_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,19 +493,23 @@ on_error:
|
|||||||
int git_repository_config__weakptr(git_config **out, git_repository *repo)
|
int git_repository_config__weakptr(git_config **out, git_repository *repo)
|
||||||
{
|
{
|
||||||
if (repo->_config == NULL) {
|
if (repo->_config == NULL) {
|
||||||
git_buf global_buf = GIT_BUF_INIT, system_buf = GIT_BUF_INIT;
|
git_buf global_buf = GIT_BUF_INIT, xdr_buf = GIT_BUF_INIT, system_buf = GIT_BUF_INIT;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
const char *global_config_path = NULL;
|
const char *global_config_path = NULL;
|
||||||
|
const char *xdr_config_path = NULL;
|
||||||
const char *system_config_path = NULL;
|
const char *system_config_path = NULL;
|
||||||
|
|
||||||
if (git_config_find_global_r(&global_buf) == 0)
|
if (git_config_find_global_r(&global_buf) == 0)
|
||||||
global_config_path = global_buf.ptr;
|
global_config_path = global_buf.ptr;
|
||||||
|
|
||||||
|
if (git_config_find_xdr_r(&xdr_buf) == 0)
|
||||||
|
xdr_config_path = xdr_buf.ptr;
|
||||||
|
|
||||||
if (git_config_find_system_r(&system_buf) == 0)
|
if (git_config_find_system_r(&system_buf) == 0)
|
||||||
system_config_path = system_buf.ptr;
|
system_config_path = system_buf.ptr;
|
||||||
|
|
||||||
res = load_config(&repo->_config, repo, global_config_path, system_config_path);
|
res = load_config(&repo->_config, repo, global_config_path, xdr_config_path, system_config_path);
|
||||||
|
|
||||||
git_buf_free(&global_buf);
|
git_buf_free(&global_buf);
|
||||||
git_buf_free(&system_buf);
|
git_buf_free(&system_buf);
|
||||||
|
Loading…
Reference in New Issue
Block a user