Support new config locations As of git v1.7.12, $HOME/.config/git/ is supported as a new location for "config", "attributes", and "ignore" files.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
diff --git a/src/attr.c b/src/attr.c
index 8a7ff28..9932206 100644
--- a/src/attr.c
+++ b/src/attr.c
@@ -590,6 +590,18 @@ static int collect_attr_files(
return error;
}
+static char *try_global_default(const char *relpath)
+{
+ git_buf dflt = GIT_BUF_INIT;
+ char *rval = NULL;
+
+ if (!git_futils_find_global_file(&dflt, relpath))
+ rval = git_buf_detach(&dflt);
+
+ git_buf_free(&dflt);
+
+ return rval;
+}
int git_attr_cache__init(git_repository *repo)
{
@@ -607,20 +619,14 @@ int git_attr_cache__init(git_repository *repo)
ret = git_config_get_string(&cache->cfg_attr_file, cfg, GIT_ATTR_CONFIG);
if (ret < 0 && ret != GIT_ENOTFOUND)
return ret;
+ if (ret == GIT_ENOTFOUND)
+ cache->cfg_attr_file = try_global_default(GIT_ATTR_CONFIG_DEFAULT);
ret = git_config_get_string(&cache->cfg_excl_file, cfg, GIT_IGNORE_CONFIG);
if (ret < 0 && ret != GIT_ENOTFOUND)
return ret;
-
- if (ret == GIT_ENOTFOUND) {
- git_buf dflt = GIT_BUF_INIT;
-
- ret = git_futils_find_global_file(&dflt, GIT_IGNORE_CONFIG_DEFAULT);
- if (!ret)
- cache->cfg_excl_file = git_buf_detach(&dflt);
-
- git_buf_free(&dflt);
- }
+ if (ret == GIT_ENOTFOUND)
+ cache->cfg_excl_file = try_global_default(GIT_IGNORE_CONFIG_DEFAULT);
giterr_clear();
diff --git a/src/attr.h b/src/attr.h
index 78cfb57..7589bb1 100644
--- a/src/attr.h
+++ b/src/attr.h
@@ -11,6 +11,7 @@
#include "strmap.h"
#define GIT_ATTR_CONFIG "core.attributesfile"
+#define GIT_ATTR_CONFIG_DEFAULT ".config/git/attributes"
#define GIT_IGNORE_CONFIG "core.excludesfile"
#define GIT_IGNORE_CONFIG_DEFAULT ".config/git/ignore"
diff --git a/src/config.c b/src/config.c
index 277daaa..e62dccf 100644
--- a/src/config.c
+++ b/src/config.c
@@ -449,7 +449,12 @@ int git_config_set_multivar(git_config *cfg, const char *name, const char *regex
int git_config_find_global_r(git_buf *path)
{
- return git_futils_find_global_file(path, GIT_CONFIG_FILENAME);
+ int error = git_futils_find_global_file(path, GIT_CONFIG_FILENAME);
+
+ if (error == GIT_ENOTFOUND)
+ error = git_futils_find_global_file(path, GIT_CONFIG_FILENAME_ALT);
+
+ return error;
}
int git_config_find_global(char *global_config_path, size_t length)
diff --git a/src/config.h b/src/config.h
index 82e98ce..5475ef3 100644
--- a/src/config.h
+++ b/src/config.h
@@ -13,6 +13,7 @@
#include "repository.h"
#define GIT_CONFIG_FILENAME ".gitconfig"
+#define GIT_CONFIG_FILENAME_ALT ".config/git/config"
#define GIT_CONFIG_FILENAME_INREPO "config"
#define GIT_CONFIG_FILENAME_SYSTEM "gitconfig"
#define GIT_CONFIG_FILE_MODE 0666