1/*
2* We put all the git config variables in this same object
3* file, so that programs can link against the config parser
4* without having to link against all the rest of git.
5*
6* In particular, no need to bring in libz etc unless needed,
7* even if you might want to know where the git directory etc
8* are.
9*/
10#include "cache.h"
1112
char git_default_email[MAX_GITNAME];
13char git_default_name[MAX_GITNAME];
14int use_legacy_headers = 1;
15int trust_executable_bit = 1;
16int assume_unchanged;
17int prefer_symlink_refs;
18int log_all_ref_updates;
19int warn_ambiguous_refs = 1;
20int repository_format_version;
21char *git_commit_encoding;
22char *git_log_output_encoding;
23int shared_repository = PERM_UMASK;
24const char *apply_default_whitespace;
25int zlib_compression_level = Z_DEFAULT_COMPRESSION;
26int pager_in_use;
27int pager_use_color = 1;
2829
static const char *git_dir;
30static char *git_object_dir, *git_index_file, *git_refs_dir, *git_graft_file;
3132
static void setup_git_env(void)
33{
34git_dir = getenv(GIT_DIR_ENVIRONMENT);
35if (!git_dir)
36git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
37git_object_dir = getenv(DB_ENVIRONMENT);
38if (!git_object_dir) {
39git_object_dir = xmalloc(strlen(git_dir) + 9);
40sprintf(git_object_dir, "%s/objects", git_dir);
41}
42git_refs_dir = xmalloc(strlen(git_dir) + 6);
43sprintf(git_refs_dir, "%s/refs", git_dir);
44git_index_file = getenv(INDEX_ENVIRONMENT);
45if (!git_index_file) {
46git_index_file = xmalloc(strlen(git_dir) + 7);
47sprintf(git_index_file, "%s/index", git_dir);
48}
49git_graft_file = getenv(GRAFT_ENVIRONMENT);
50if (!git_graft_file)
51git_graft_file = xstrdup(git_path("info/grafts"));
52log_all_ref_updates = !is_bare_git_dir(git_dir);
53}
5455
int is_bare_git_dir (const char *dir)
56{
57const char *s;
58if (!strcmp(dir, DEFAULT_GIT_DIR_ENVIRONMENT))
59return 0;
60s = strrchr(dir, '/');
61return !s || strcmp(s + 1, DEFAULT_GIT_DIR_ENVIRONMENT);
62}
6364
const char *get_git_dir(void)
65{
66if (!git_dir)
67setup_git_env();
68return git_dir;
69}
7071
char *get_object_directory(void)
72{
73if (!git_object_dir)
74setup_git_env();
75return git_object_dir;
76}
7778
char *get_refs_directory(void)
79{
80if (!git_refs_dir)
81setup_git_env();
82return git_refs_dir;
83}
8485
char *get_index_file(void)
86{
87if (!git_index_file)
88setup_git_env();
89return git_index_file;
90}
9192
char *get_graft_file(void)
93{
94if (!git_graft_file)
95setup_git_env();
96return git_graft_file;
97}
9899