repo-config: learn the flag "--no-local"
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Thu, 8 Jun 2006 11:31:46 +0000 (13:31 +0200)
committerJunio C Hamano <junkio@cox.net>
Sat, 10 Jun 2006 21:09:25 +0000 (14:09 -0700)
Since there is a global config now, we need a way to access it
conveniently. Now you can say

git repo-config --no-local alias.l "log --stat -M ORIG_HEAD.."

to set the alias globally (it will be stored in ~/.gitconfig).

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
cache.h
config.c
repo-config.c

diff --git a/cache.h b/cache.h
index d5d7fe4..14fe5c8 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -348,6 +348,7 @@ extern void packed_object_info_detail(struct pack_entry *, char *, unsigned long
 /* Dumb servers support */
 extern int update_server_info(int);
 
+extern int git_ignore_local_config;
 typedef int (*config_fn_t)(const char *, const char *);
 extern int git_default_config(const char *, const char *);
 extern int git_config_from_file(config_fn_t fn, const char *);
index bbd3ff2..4080264 100644 (file)
--- a/config.c
+++ b/config.c
@@ -10,6 +10,7 @@
 
 #define MAXNAME (256)
 
+int git_ignore_local_config = 0;
 static FILE *config_file;
 static const char *config_file_name;
 static int config_linenr;
@@ -327,7 +328,8 @@ int git_config(config_fn_t fn)
                        ret = 0;
        }
 
-       ret += git_config_from_file(fn, git_path("config"));
+       if (!git_ignore_local_config)
+               ret += git_config_from_file(fn, git_path("config"));
        return ret;
 }
 
@@ -501,10 +503,20 @@ int git_config_set_multivar(const char* key, const char* value,
        int i, dot;
        int fd = -1, in_fd;
        int ret;
-       char* config_filename = strdup(git_path("config"));
-       char* lock_file = strdup(git_path("config.lock"));
+       char *config_filename, *lock_file;
        const char* last_dot = strrchr(key, '.');
 
+       if (git_ignore_local_config) {
+               const char *home = getenv("HOME");
+               if (!home)
+                       die("No home?");
+               config_filename = strdup(mkpath("%s/.gitconfig", home));
+               lock_file = strdup(mkpath("%s/.gitconfig.lock", home));
+       } else {
+               config_filename = strdup(git_path("config"));
+               lock_file = strdup(git_path("config.lock"));
+       }
+
        /*
         * Since "key" actually contains the section name and the real
         * key name separated by a dot, we have to know where the dot is.
@@ -611,8 +623,9 @@ int git_config_set_multivar(const char* key, const char* value,
                 * As a side effect, we make sure to transform only a valid
                 * existing config file.
                 */
-               if (git_config(store_aux)) {
-                       fprintf(stderr, "invalid config file\n");
+               if (git_config_from_file(store_aux, config_filename)) {
+                       fprintf(stderr, "invalid config file: %s\n",
+                                       config_filename);
                        free(store.key);
                        if (store.value_regex != NULL) {
                                regfree(store.value_regex);
index 59c2bfb..8c0bb20 100644 (file)
@@ -97,7 +97,8 @@ static int get_value(const char* key_, const char* regex_)
 
        if (do_all && global)
                git_config_from_file(show_config, global);
-       git_config_from_file(show_config, git_path("config"));
+       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);
 
@@ -125,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--;