config: read system-wide defaults from /etc/gitconfig
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Wed, 14 Feb 2007 11:48:14 +0000 (12:48 +0100)
committerJunio C Hamano <junkio@cox.net>
Tue, 20 Feb 2007 07:05:16 +0000 (23:05 -0800)
The settings in /etc/gitconfig can be overridden in ~/.gitconfig,
which in turn can be overridden in .git/config.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/config.txt
Makefile
builtin-config.c
config.c
index 38655350f22bde08786b4a42e608ba76c1becea4..1dd90d804623e8d6c88caf11059801aadf6d26f3 100644 (file)
@@ -5,7 +5,8 @@ The git configuration file contains a number of variables that affect
 the git command's behavior. `.git/config` file for each repository
 is used to store the information for that repository, and
 `$HOME/.gitconfig` is used to store per user information to give
 the git command's behavior. `.git/config` file for each repository
 is used to store the information for that repository, and
 `$HOME/.gitconfig` is used to store per user information to give
-fallback values for `.git/config` file.
+fallback values for `.git/config` file. The file `/etc/gitconfig`
+can be used to store system-wide defaults.
 
 They can be used by both the git plumbing
 and the porcelains. The variables are divided into sections, where
 
 They can be used by both the git plumbing
 and the porcelains. The variables are divided into sections, where
index 40bdcff696f3270ced943945183306fc9899407d..203aac4517b3ac0311e0e6444caf64a5fa2b67df 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -124,6 +124,7 @@ prefix = $(HOME)
 bindir = $(prefix)/bin
 gitexecdir = $(bindir)
 template_dir = $(prefix)/share/git-core/templates/
 bindir = $(prefix)/bin
 gitexecdir = $(bindir)
 template_dir = $(prefix)/share/git-core/templates/
+ETC_GITCONFIG = $(prefix)/etc/gitconfig
 # DESTDIR=
 
 # default configuration for gitweb
 # DESTDIR=
 
 # default configuration for gitweb
@@ -584,6 +585,7 @@ endif
 # Shell quote (do not use $(call) to accommodate ancient setups);
 
 SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
 # Shell quote (do not use $(call) to accommodate ancient setups);
 
 SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
+ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
 
 DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
 bindir_SQ = $(subst ','\'',$(bindir))
 
 DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
 bindir_SQ = $(subst ','\'',$(bindir))
@@ -596,7 +598,8 @@ PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
 
 LIBS = $(GITLIBS) $(EXTLIBS)
 
 
 LIBS = $(GITLIBS) $(EXTLIBS)
 
-BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' $(COMPAT_CFLAGS)
+BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
+       -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"' $(COMPAT_CFLAGS)
 LIB_OBJS += $(COMPAT_OBJS)
 
 ALL_CFLAGS += $(BASIC_CFLAGS)
 LIB_OBJS += $(COMPAT_OBJS)
 
 ALL_CFLAGS += $(BASIC_CFLAGS)
index 0f9051da17c6e399709bd476ab867f4505ecba63..f1433a4ab6ffaa6fe29fe6be9d97f02a4c4d6e87 100644 (file)
@@ -64,7 +64,7 @@ static int get_value(const char* key_, const char* regex_)
        int ret = -1;
        char *tl;
        char *global = NULL, *repo_config = NULL;
        int ret = -1;
        char *tl;
        char *global = NULL, *repo_config = NULL;
-       const char *local;
+       const char *system_wide = NULL, *local;
 
        local = getenv(CONFIG_ENVIRONMENT);
        if (!local) {
 
        local = getenv(CONFIG_ENVIRONMENT);
        if (!local) {
@@ -74,6 +74,7 @@ static int get_value(const char* key_, const char* regex_)
                        local = repo_config = xstrdup(git_path("config"));
                if (home)
                        global = xstrdup(mkpath("%s/.gitconfig", home));
                        local = repo_config = xstrdup(git_path("config"));
                if (home)
                        global = xstrdup(mkpath("%s/.gitconfig", home));
+               system_wide = ETC_GITCONFIG;
        }
 
        key = xstrdup(key_);
        }
 
        key = xstrdup(key_);
@@ -103,11 +104,15 @@ static int get_value(const char* key_, const char* regex_)
                }
        }
 
                }
        }
 
+       if (do_all && system_wide)
+               git_config_from_file(show_config, system_wide);
        if (do_all && global)
                git_config_from_file(show_config, global);
        git_config_from_file(show_config, local);
        if (!do_all && !seen && global)
                git_config_from_file(show_config, global);
        if (do_all && global)
                git_config_from_file(show_config, global);
        git_config_from_file(show_config, local);
        if (!do_all && !seen && global)
                git_config_from_file(show_config, global);
+       if (!do_all && !seen && system_wide)
+               git_config_from_file(show_config, system_wide);
 
        free(key);
        if (regexp) {
 
        free(key);
        if (regexp) {
@@ -147,7 +152,10 @@ int cmd_config(int argc, const char **argv, const char *prefix)
                        } else {
                                die("$HOME not set");
                        }
                        } else {
                                die("$HOME not set");
                        }
-               } else if (!strcmp(argv[1], "--rename-section")) {
+               }
+               else if (!strcmp(argv[1], "--system"))
+                       setenv("GIT_CONFIG", ETC_GITCONFIG, 1);
+               else if (!strcmp(argv[1], "--rename-section")) {
                        int ret;
                        if (argc != 4)
                                usage(git_config_set_usage);
                        int ret;
                        if (argc != 4)
                                usage(git_config_set_usage);
@@ -159,7 +167,8 @@ int cmd_config(int argc, const char **argv, const char *prefix)
                                return 1;
                        }
                        return 0;
                                return 1;
                        }
                        return 0;
-               } else
+               }
+               else
                        break;
                argc--;
                argv++;
                        break;
                argc--;
                argv++;
index d82107124a53bca99ee65ea31dceb3871bf6796f..b0c0948cc825f783ee5187aa5ff60838bd4a2759 100644 (file)
--- a/config.c
+++ b/config.c
@@ -383,6 +383,8 @@ int git_config(config_fn_t fn)
         * config file otherwise. */
        filename = getenv(CONFIG_ENVIRONMENT);
        if (!filename) {
         * config file otherwise. */
        filename = getenv(CONFIG_ENVIRONMENT);
        if (!filename) {
+               if (!access(ETC_GITCONFIG, R_OK))
+                       ret += git_config_from_file(fn, ETC_GITCONFIG);
                home = getenv("HOME");
                filename = getenv(CONFIG_LOCAL_ENVIRONMENT);
                if (!filename)
                home = getenv("HOME");
                filename = getenv(CONFIG_LOCAL_ENVIRONMENT);
                if (!filename)