Merge branch 'js/config' into pu
[git.git] / repo-config.c
index 63eda1b..8c0bb20 100644 (file)
@@ -64,12 +64,15 @@ static int show_config(const char* key_, const char* value_)
 
 static int get_value(const char* key_, const char* regex_)
 {
-       int i;
+       char *tl;
+       const char *home = getenv("HOME");
+       const char *global =  (home ? mkpath("%s/.gitconfig", home) : NULL);
 
-       key = malloc(strlen(key_)+1);
-       for (i = 0; key_[i]; i++)
-               key[i] = tolower(key_[i]);
-       key[i] = 0;
+       key = strdup(key_);
+       for (tl=key+strlen(key)-1; tl >= key && *tl != '.'; --tl)
+               *tl = tolower(*tl);
+       for (tl=key; *tl && *tl != '.'; ++tl)
+               *tl = tolower(*tl);
 
        if (use_key_regexp) {
                key_regexp = (regex_t*)malloc(sizeof(regex_t));
@@ -92,7 +95,13 @@ static int get_value(const char* key_, const char* regex_)
                }
        }
 
-       git_config(show_config);
+       if (do_all && global)
+               git_config_from_file(show_config, global);
+       if (!git_ignore_local_config)
+               git_config_from_file(show_config, git_path("config"));
+       if (!do_all && !seen)
+               git_config_from_file(show_config, global);
+
        free(key);
        if (regexp) {
                regfree(regexp);
@@ -107,7 +116,8 @@ static int get_value(const char* key_, const char* regex_)
 
 int main(int argc, const char **argv)
 {
-       setup_git_directory();
+       int nongit = 0;
+       setup_git_directory_gently(&nongit);
 
        while (1 < argc) {
                if (!strcmp(argv[1], "--int"))
@@ -116,6 +126,8 @@ int main(int argc, const char **argv)
                        type = T_BOOL;
                else if (!strcmp(argv[1], "--list") || !strcmp(argv[1], "-l"))
                        return git_config(show_all_config);
+               else if (!strcmp(argv[1], "--no-local"))
+                       git_ignore_local_config = 1;
                else
                        break;
                argc--;