]> git.ipfire.org Git - thirdparty/git.git/blame - environment.h
cache,tree: move cmp_cache_name_compare from tree.[ch] to read-cache.c
[thirdparty/git.git] / environment.h
CommitLineData
b9d147fb
PS
1#ifndef ENVIRONMENT_H
2#define ENVIRONMENT_H
3
4#include "strvec.h"
5
32a8f510
EN
6struct repository;
7
7ee24e18
EN
8/*
9 * The character that begins a commented line in user-editable file
10 * that is subject to stripspace.
11 */
12extern char comment_line_char;
13extern int auto_comment_line_char;
14
b9d147fb
PS
15/*
16 * Wrapper of getenv() that returns a strdup value. This value is kept
17 * in argv to be freed later.
18 */
19const char *getenv_safe(struct strvec *argv, const char *name);
20
32a8f510
EN
21/* Double-check local_repo_env below if you add to this list. */
22#define GIT_DIR_ENVIRONMENT "GIT_DIR"
23#define GIT_COMMON_DIR_ENVIRONMENT "GIT_COMMON_DIR"
24#define GIT_NAMESPACE_ENVIRONMENT "GIT_NAMESPACE"
25#define GIT_WORK_TREE_ENVIRONMENT "GIT_WORK_TREE"
26#define GIT_PREFIX_ENVIRONMENT "GIT_PREFIX"
27#define DEFAULT_GIT_DIR_ENVIRONMENT ".git"
28#define DB_ENVIRONMENT "GIT_OBJECT_DIRECTORY"
29#define INDEX_ENVIRONMENT "GIT_INDEX_FILE"
30#define GRAFT_ENVIRONMENT "GIT_GRAFT_FILE"
31#define GIT_SHALLOW_FILE_ENVIRONMENT "GIT_SHALLOW_FILE"
32#define TEMPLATE_DIR_ENVIRONMENT "GIT_TEMPLATE_DIR"
33#define CONFIG_ENVIRONMENT "GIT_CONFIG"
34#define CONFIG_DATA_ENVIRONMENT "GIT_CONFIG_PARAMETERS"
35#define CONFIG_COUNT_ENVIRONMENT "GIT_CONFIG_COUNT"
36#define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH"
37#define CEILING_DIRECTORIES_ENVIRONMENT "GIT_CEILING_DIRECTORIES"
38#define NO_REPLACE_OBJECTS_ENVIRONMENT "GIT_NO_REPLACE_OBJECTS"
39#define GIT_REPLACE_REF_BASE_ENVIRONMENT "GIT_REPLACE_REF_BASE"
40#define GITATTRIBUTES_FILE ".gitattributes"
41#define INFOATTRIBUTES_FILE "info/attributes"
42#define ATTRIBUTE_MACRO_PREFIX "[attr]"
43#define GITMODULES_FILE ".gitmodules"
44#define GITMODULES_INDEX ":.gitmodules"
45#define GITMODULES_HEAD "HEAD:.gitmodules"
46#define GIT_NOTES_REF_ENVIRONMENT "GIT_NOTES_REF"
47#define GIT_NOTES_DEFAULT_REF "refs/notes/commits"
48#define GIT_NOTES_DISPLAY_REF_ENVIRONMENT "GIT_NOTES_DISPLAY_REF"
49#define GIT_NOTES_REWRITE_REF_ENVIRONMENT "GIT_NOTES_REWRITE_REF"
50#define GIT_NOTES_REWRITE_MODE_ENVIRONMENT "GIT_NOTES_REWRITE_MODE"
51#define GIT_LITERAL_PATHSPECS_ENVIRONMENT "GIT_LITERAL_PATHSPECS"
52#define GIT_GLOB_PATHSPECS_ENVIRONMENT "GIT_GLOB_PATHSPECS"
53#define GIT_NOGLOB_PATHSPECS_ENVIRONMENT "GIT_NOGLOB_PATHSPECS"
54#define GIT_ICASE_PATHSPECS_ENVIRONMENT "GIT_ICASE_PATHSPECS"
55#define GIT_QUARANTINE_ENVIRONMENT "GIT_QUARANTINE_PATH"
56#define GIT_OPTIONAL_LOCKS_ENVIRONMENT "GIT_OPTIONAL_LOCKS"
57#define GIT_TEXT_DOMAIN_DIR_ENVIRONMENT "GIT_TEXTDOMAINDIR"
58
59/*
60 * Environment variable used in handshaking the wire protocol.
61 * Contains a colon ':' separated list of keys with optional values
62 * 'key[=value]'. Presence of unknown keys and values must be
63 * ignored.
64 */
65#define GIT_PROTOCOL_ENVIRONMENT "GIT_PROTOCOL"
66/* HTTP header used to handshake the wire protocol */
67#define GIT_PROTOCOL_HEADER "Git-Protocol"
68
69/*
70 * This environment variable is expected to contain a boolean indicating
71 * whether we should or should not treat:
72 *
73 * GIT_DIR=foo.git git ...
74 *
75 * as if GIT_WORK_TREE=. was given. It's not expected that users will make use
76 * of this, but we use it internally to communicate to sub-processes that we
77 * are in a bare repo. If not set, defaults to true.
78 */
79#define GIT_IMPLICIT_WORK_TREE_ENVIRONMENT "GIT_IMPLICIT_WORK_TREE"
80
81/*
82 * Repository-local GIT_* environment variables; these will be cleared
83 * when git spawns a sub-process that runs inside another repository.
84 * The array is NULL-terminated, which makes it easy to pass in the "env"
85 * parameter of a run-command invocation, or to do a simple walk.
86 */
87extern const char * const local_repo_env[];
88
89void setup_git_env(const char *git_dir);
90
91/*
92 * Returns true iff we have a configured git repository (either via
93 * setup_git_directory, or in the environment via $GIT_DIR).
94 */
95int have_git_dir(void);
96
97extern int is_bare_repository_cfg;
98int is_bare_repository(void);
99extern char *git_work_tree_cfg;
100const char *get_git_dir(void);
101const char *get_git_common_dir(void);
102const char *get_object_directory(void);
103char *get_index_file(void);
104char *get_graft_file(struct repository *r);
105void set_git_dir(const char *path, int make_realpath);
106const char *get_git_namespace(void);
107const char *strip_namespace(const char *namespaced_ref);
108const char *get_git_work_tree(void);
109void set_git_work_tree(const char *tree);
110
111#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
112
113/* Environment bits from configuration mechanism */
114extern int trust_executable_bit;
115extern int trust_ctime;
116extern int check_stat;
117extern int has_symlinks;
118extern int minimum_abbrev, default_abbrev;
119extern int ignore_case;
120extern int assume_unchanged;
121extern int prefer_symlink_refs;
122extern int warn_ambiguous_refs;
123extern int warn_on_object_refname_ambiguity;
124extern char *apply_default_whitespace;
125extern char *apply_default_ignorewhitespace;
126extern const char *git_attributes_file;
127extern const char *git_hooks_path;
128extern int zlib_compression_level;
129extern int pack_compression_level;
130extern size_t packed_git_window_size;
131extern size_t packed_git_limit;
132extern size_t delta_base_cache_limit;
133extern unsigned long big_file_threshold;
134extern unsigned long pack_size_limit_cfg;
135
136/*
137 * Accessors for the core.sharedrepository config which lazy-load the value
138 * from the config (if not already set). The "reset" function can be
139 * used to unset "set" or cached value, meaning that the value will be loaded
140 * fresh from the config file on the next call to get_shared_repository().
141 */
142void set_shared_repository(int value);
143int get_shared_repository(void);
144void reset_shared_repository(void);
145
146extern int core_preload_index;
147extern int precomposed_unicode;
148extern int protect_hfs;
149extern int protect_ntfs;
150
151extern int core_apply_sparse_checkout;
152extern int core_sparse_checkout_cone;
153extern int sparse_expect_files_outside_of_patterns;
154
155/*
156 * Returns the boolean value of $GIT_OPTIONAL_LOCKS (or the default value).
157 */
158int use_optional_locks(void);
159
160enum log_refs_config {
161 LOG_REFS_UNSET = -1,
162 LOG_REFS_NONE = 0,
163 LOG_REFS_NORMAL,
164 LOG_REFS_ALWAYS
165};
166extern enum log_refs_config log_all_ref_updates;
167
168enum rebase_setup_type {
169 AUTOREBASE_NEVER = 0,
170 AUTOREBASE_LOCAL,
171 AUTOREBASE_REMOTE,
172 AUTOREBASE_ALWAYS
173};
174
175enum push_default_type {
176 PUSH_DEFAULT_NOTHING = 0,
177 PUSH_DEFAULT_MATCHING,
178 PUSH_DEFAULT_SIMPLE,
179 PUSH_DEFAULT_UPSTREAM,
180 PUSH_DEFAULT_CURRENT,
181 PUSH_DEFAULT_UNSPECIFIED
182};
183
184extern enum rebase_setup_type autorebase;
185extern enum push_default_type push_default;
186
187enum object_creation_mode {
188 OBJECT_CREATION_USES_HARDLINKS = 0,
189 OBJECT_CREATION_USES_RENAMES = 1
190};
191
192extern enum object_creation_mode object_creation_mode;
193
194extern char *notes_ref_name;
195
196extern int grafts_replace_parents;
197
198extern int repository_format_precious_objects;
199extern int repository_format_worktree_config;
200
201/*
202 * Create a temporary file rooted in the object database directory, or
203 * die on failure. The filename is taken from "pattern", which should have the
204 * usual "XXXXXX" trailer, and the resulting filename is written into the
205 * "template" buffer. Returns the open descriptor.
206 */
207int odb_mkstemp(struct strbuf *temp_filename, const char *pattern);
208
209/*
210 * Create a pack .keep file named "name" (which should generally be the output
211 * of odb_pack_name). Returns a file descriptor opened for writing, or -1 on
212 * error.
213 */
214int odb_pack_keep(const char *name);
215
216const char *get_log_output_encoding(void);
217const char *get_commit_output_encoding(void);
218
219extern const char *git_commit_encoding;
220extern const char *git_log_output_encoding;
221
222extern const char *editor_program;
223extern const char *askpass_program;
224extern const char *excludes_file;
225
226/*
227 * Should we print an ellipsis after an abbreviated SHA-1 value
228 * when doing diff-raw output or indicating a detached HEAD?
229 */
230int print_sha1_ellipsis(void);
231
b9d147fb 232#endif