Browse Source

config: read system-wide defaults from /etc/gitconfig

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>
maint
Johannes Schindelin 18 years ago committed by Junio C Hamano
parent
commit
32043c9f8c
  1. 3
      Documentation/config.txt
  2. 5
      Makefile
  3. 15
      builtin-config.c
  4. 2
      config.c

3
Documentation/config.txt

@ -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 the git command's behavior. `.git/config` file for each repository
is used to store the information for that repository, and is used to store the information for that repository, and
`$HOME/.gitconfig` is used to store per user information to give `$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 They can be used by both the git plumbing
and the porcelains. The variables are divided into sections, where and the porcelains. The variables are divided into sections, where

5
Makefile

@ -124,6 +124,7 @@ prefix = $(HOME)
bindir = $(prefix)/bin bindir = $(prefix)/bin
gitexecdir = $(bindir) gitexecdir = $(bindir)
template_dir = $(prefix)/share/git-core/templates/ template_dir = $(prefix)/share/git-core/templates/
ETC_GITCONFIG = $(prefix)/etc/gitconfig
# DESTDIR= # DESTDIR=


# default configuration for gitweb # default configuration for gitweb
@ -584,6 +585,7 @@ endif
# Shell quote (do not use $(call) to accommodate ancient setups); # Shell quote (do not use $(call) to accommodate ancient setups);


SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER)) SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))


DESTDIR_SQ = $(subst ','\'',$(DESTDIR)) DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir)) 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) LIB_OBJS += $(COMPAT_OBJS)


ALL_CFLAGS += $(BASIC_CFLAGS) ALL_CFLAGS += $(BASIC_CFLAGS)

15
builtin-config.c

@ -64,7 +64,7 @@ static int get_value(const char* key_, const char* regex_)
int ret = -1; int ret = -1;
char *tl; char *tl;
char *global = NULL, *repo_config = NULL; char *global = NULL, *repo_config = NULL;
const char *local; const char *system_wide = NULL, *local;


local = getenv(CONFIG_ENVIRONMENT); local = getenv(CONFIG_ENVIRONMENT);
if (!local) { if (!local) {
@ -74,6 +74,7 @@ static int get_value(const char* key_, const char* regex_)
local = repo_config = xstrdup(git_path("config")); local = repo_config = xstrdup(git_path("config"));
if (home) if (home)
global = xstrdup(mkpath("%s/.gitconfig", 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) if (do_all && global)
git_config_from_file(show_config, global); git_config_from_file(show_config, global);
git_config_from_file(show_config, local); git_config_from_file(show_config, local);
if (!do_all && !seen && global) if (!do_all && !seen && global)
git_config_from_file(show_config, global); git_config_from_file(show_config, global);
if (!do_all && !seen && system_wide)
git_config_from_file(show_config, system_wide);


free(key); free(key);
if (regexp) { if (regexp) {
@ -147,7 +152,10 @@ int cmd_config(int argc, const char **argv, const char *prefix)
} else { } else {
die("$HOME not set"); 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; int ret;
if (argc != 4) if (argc != 4)
usage(git_config_set_usage); usage(git_config_set_usage);
@ -159,7 +167,8 @@ int cmd_config(int argc, const char **argv, const char *prefix)
return 1; return 1;
} }
return 0; return 0;
} else }
else
break; break;
argc--; argc--;
argv++; argv++;

2
config.c

@ -383,6 +383,8 @@ int git_config(config_fn_t fn)
* config file otherwise. */ * config file otherwise. */
filename = getenv(CONFIG_ENVIRONMENT); filename = getenv(CONFIG_ENVIRONMENT);
if (!filename) { if (!filename) {
if (!access(ETC_GITCONFIG, R_OK))
ret += git_config_from_file(fn, ETC_GITCONFIG);
home = getenv("HOME"); home = getenv("HOME");
filename = getenv(CONFIG_LOCAL_ENVIRONMENT); filename = getenv(CONFIG_LOCAL_ENVIRONMENT);
if (!filename) if (!filename)

Loading…
Cancel
Save