Code

Eliminate Scalar::Util usage from private-Error.pm
[git.git] / environment.c
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"
12 char git_default_email[MAX_GITNAME];
13 char git_default_name[MAX_GITNAME];
14 int trust_executable_bit = 1;
15 int assume_unchanged = 0;
16 int prefer_symlink_refs = 0;
17 int log_all_ref_updates = 0;
18 int warn_ambiguous_refs = 1;
19 int repository_format_version = 0;
20 char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";
21 int shared_repository = PERM_UMASK;
22 const char *apply_default_whitespace = NULL;
24 static int dyn_git_object_dir, dyn_git_index_file, dyn_git_graft_file;
25 static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
26         *git_graft_file;
28 void setup_git(char *new_git_dir, char *new_git_object_dir,
29                char *new_git_index_file, char *new_git_graft_file)
30 {
31         git_dir = new_git_dir;
32         if (!git_dir)
33                 git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
35         if (dyn_git_object_dir)
36                 free(git_object_dir);
37         git_object_dir = new_git_object_dir;
38         if (!git_object_dir) {
39                 git_object_dir = xmalloc(strlen(git_dir) + 9);
40                 sprintf(git_object_dir, "%s/objects", git_dir);
41                 dyn_git_object_dir = 1;
42         } else {
43                 dyn_git_object_dir = 0;
44         }
46         if (git_refs_dir)
47                 free(git_refs_dir);
48         git_refs_dir = xmalloc(strlen(git_dir) + 6);
49         sprintf(git_refs_dir, "%s/refs", git_dir);
51         if (dyn_git_index_file)
52                 free(git_index_file);
53         git_index_file = new_git_index_file;
54         if (!git_index_file) {
55                 git_index_file = xmalloc(strlen(git_dir) + 7);
56                 sprintf(git_index_file, "%s/index", git_dir);
57                 dyn_git_index_file = 1;
58         } else {
59                 dyn_git_index_file = 0;
60         }
62         if (dyn_git_graft_file)
63                 free(git_graft_file);
64         git_graft_file = new_git_graft_file;
65         if (!git_graft_file) {
66                 git_graft_file = strdup(git_path("info/grafts"));
67                 dyn_git_graft_file = 1;
68         } else {
69                 dyn_git_graft_file = 0;
70         }
71 }
73 static void setup_git_env(void)
74 {
75         setup_git(getenv(GIT_DIR_ENVIRONMENT),
76                   getenv(DB_ENVIRONMENT),
77                   getenv(INDEX_ENVIRONMENT),
78                   getenv(GRAFT_ENVIRONMENT));
79 }
81 char *get_git_dir(void)
82 {
83         if (!git_dir)
84                 setup_git_env();
85         return git_dir;
86 }
88 char *get_object_directory(void)
89 {
90         if (!git_object_dir)
91                 setup_git_env();
92         return git_object_dir;
93 }
95 char *get_refs_directory(void)
96 {
97         if (!git_refs_dir)
98                 setup_git_env();
99         return git_refs_dir;
102 char *get_index_file(void)
104         if (!git_index_file)
105                 setup_git_env();
106         return git_index_file;
109 char *get_graft_file(void)
111         if (!git_graft_file)
112                 setup_git_env();
113         return git_graft_file;