2021-01-12 20:27:10 +08:00
|
|
|
#ifndef ENVIRONMENT_H
|
|
|
|
#define ENVIRONMENT_H
|
|
|
|
|
2024-09-12 19:30:13 +08:00
|
|
|
#include "repo-settings.h"
|
|
|
|
|
2023-03-21 14:26:03 +08:00
|
|
|
/* Double-check local_repo_env below if you add to this list. */
|
|
|
|
#define GIT_DIR_ENVIRONMENT "GIT_DIR"
|
|
|
|
#define GIT_COMMON_DIR_ENVIRONMENT "GIT_COMMON_DIR"
|
|
|
|
#define GIT_NAMESPACE_ENVIRONMENT "GIT_NAMESPACE"
|
|
|
|
#define GIT_WORK_TREE_ENVIRONMENT "GIT_WORK_TREE"
|
|
|
|
#define GIT_PREFIX_ENVIRONMENT "GIT_PREFIX"
|
|
|
|
#define DEFAULT_GIT_DIR_ENVIRONMENT ".git"
|
|
|
|
#define DB_ENVIRONMENT "GIT_OBJECT_DIRECTORY"
|
|
|
|
#define INDEX_ENVIRONMENT "GIT_INDEX_FILE"
|
|
|
|
#define GRAFT_ENVIRONMENT "GIT_GRAFT_FILE"
|
|
|
|
#define GIT_SHALLOW_FILE_ENVIRONMENT "GIT_SHALLOW_FILE"
|
|
|
|
#define TEMPLATE_DIR_ENVIRONMENT "GIT_TEMPLATE_DIR"
|
|
|
|
#define CONFIG_ENVIRONMENT "GIT_CONFIG"
|
|
|
|
#define CONFIG_DATA_ENVIRONMENT "GIT_CONFIG_PARAMETERS"
|
|
|
|
#define CONFIG_COUNT_ENVIRONMENT "GIT_CONFIG_COUNT"
|
|
|
|
#define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH"
|
|
|
|
#define CEILING_DIRECTORIES_ENVIRONMENT "GIT_CEILING_DIRECTORIES"
|
|
|
|
#define NO_REPLACE_OBJECTS_ENVIRONMENT "GIT_NO_REPLACE_OBJECTS"
|
|
|
|
#define GIT_REPLACE_REF_BASE_ENVIRONMENT "GIT_REPLACE_REF_BASE"
|
2024-02-28 00:48:29 +08:00
|
|
|
#define NO_LAZY_FETCH_ENVIRONMENT "GIT_NO_LAZY_FETCH"
|
2023-03-21 14:26:03 +08:00
|
|
|
#define GITATTRIBUTES_FILE ".gitattributes"
|
|
|
|
#define INFOATTRIBUTES_FILE "info/attributes"
|
|
|
|
#define ATTRIBUTE_MACRO_PREFIX "[attr]"
|
|
|
|
#define GITMODULES_FILE ".gitmodules"
|
|
|
|
#define GITMODULES_INDEX ":.gitmodules"
|
|
|
|
#define GITMODULES_HEAD "HEAD:.gitmodules"
|
|
|
|
#define GIT_NOTES_REF_ENVIRONMENT "GIT_NOTES_REF"
|
|
|
|
#define GIT_NOTES_DEFAULT_REF "refs/notes/commits"
|
|
|
|
#define GIT_NOTES_DISPLAY_REF_ENVIRONMENT "GIT_NOTES_DISPLAY_REF"
|
|
|
|
#define GIT_NOTES_REWRITE_REF_ENVIRONMENT "GIT_NOTES_REWRITE_REF"
|
|
|
|
#define GIT_NOTES_REWRITE_MODE_ENVIRONMENT "GIT_NOTES_REWRITE_MODE"
|
|
|
|
#define GIT_LITERAL_PATHSPECS_ENVIRONMENT "GIT_LITERAL_PATHSPECS"
|
|
|
|
#define GIT_GLOB_PATHSPECS_ENVIRONMENT "GIT_GLOB_PATHSPECS"
|
|
|
|
#define GIT_NOGLOB_PATHSPECS_ENVIRONMENT "GIT_NOGLOB_PATHSPECS"
|
|
|
|
#define GIT_ICASE_PATHSPECS_ENVIRONMENT "GIT_ICASE_PATHSPECS"
|
|
|
|
#define GIT_QUARANTINE_ENVIRONMENT "GIT_QUARANTINE_PATH"
|
|
|
|
#define GIT_OPTIONAL_LOCKS_ENVIRONMENT "GIT_OPTIONAL_LOCKS"
|
|
|
|
#define GIT_TEXT_DOMAIN_DIR_ENVIRONMENT "GIT_TEXTDOMAINDIR"
|
2023-05-06 12:15:29 +08:00
|
|
|
#define GIT_ATTR_SOURCE_ENVIRONMENT "GIT_ATTR_SOURCE"
|
2023-03-21 14:26:03 +08:00
|
|
|
|
2024-05-03 15:17:06 +08:00
|
|
|
/*
|
|
|
|
* Environment variable used to propagate the --no-advice global option to the
|
|
|
|
* advice_enabled() helper, even when run in a subprocess.
|
|
|
|
* This is an internal variable that should not be set by the user.
|
|
|
|
*/
|
|
|
|
#define GIT_ADVICE_ENVIRONMENT "GIT_ADVICE"
|
|
|
|
|
2023-03-21 14:26:03 +08:00
|
|
|
/*
|
|
|
|
* Environment variable used in handshaking the wire protocol.
|
|
|
|
* Contains a colon ':' separated list of keys with optional values
|
|
|
|
* 'key[=value]'. Presence of unknown keys and values must be
|
|
|
|
* ignored.
|
|
|
|
*/
|
|
|
|
#define GIT_PROTOCOL_ENVIRONMENT "GIT_PROTOCOL"
|
|
|
|
/* HTTP header used to handshake the wire protocol */
|
|
|
|
#define GIT_PROTOCOL_HEADER "Git-Protocol"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This environment variable is expected to contain a boolean indicating
|
|
|
|
* whether we should or should not treat:
|
|
|
|
*
|
|
|
|
* GIT_DIR=foo.git git ...
|
|
|
|
*
|
|
|
|
* as if GIT_WORK_TREE=. was given. It's not expected that users will make use
|
|
|
|
* of this, but we use it internally to communicate to sub-processes that we
|
|
|
|
* are in a bare repo. If not set, defaults to true.
|
|
|
|
*/
|
|
|
|
#define GIT_IMPLICIT_WORK_TREE_ENVIRONMENT "GIT_IMPLICIT_WORK_TREE"
|
|
|
|
|
2024-09-12 19:29:59 +08:00
|
|
|
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
|
|
|
|
|
2023-03-21 14:26:03 +08:00
|
|
|
/*
|
|
|
|
* Repository-local GIT_* environment variables; these will be cleared
|
|
|
|
* when git spawns a sub-process that runs inside another repository.
|
|
|
|
* The array is NULL-terminated, which makes it easy to pass in the "env"
|
|
|
|
* parameter of a run-command invocation, or to do a simple walk.
|
|
|
|
*/
|
|
|
|
extern const char * const local_repo_env[];
|
|
|
|
|
2024-09-12 19:29:59 +08:00
|
|
|
struct strvec;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Wrapper of getenv() that returns a strdup value. This value is kept
|
|
|
|
* in argv to be freed later.
|
|
|
|
*/
|
|
|
|
const char *getenv_safe(struct strvec *argv, const char *name);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Should we print an ellipsis after an abbreviated SHA-1 value
|
|
|
|
* when doing diff-raw output or indicating a detached HEAD?
|
|
|
|
*/
|
|
|
|
int print_sha1_ellipsis(void);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Returns the boolean value of $GIT_OPTIONAL_LOCKS (or the default value).
|
|
|
|
*/
|
|
|
|
int use_optional_locks(void);
|
|
|
|
|
|
|
|
const char *get_git_namespace(void);
|
|
|
|
const char *strip_namespace(const char *namespaced_ref);
|
|
|
|
|
2024-09-12 19:30:01 +08:00
|
|
|
/*
|
|
|
|
* TODO: All the below state either explicitly or implicitly relies on
|
|
|
|
* `the_repository`. We should eventually get rid of these and make the
|
|
|
|
* dependency on a repository explicit:
|
|
|
|
*
|
|
|
|
* - `setup_git_env()` ideally shouldn't exist as it modifies global state,
|
|
|
|
* namely the environment. The current process shouldn't ever access that
|
|
|
|
* state via envvars though, but should instead consult a `struct
|
|
|
|
* repository`. When spawning new processes, we would ideally also pass a
|
|
|
|
* `struct repository` and then set up the environment variables for the
|
|
|
|
* child process, only.
|
|
|
|
*
|
|
|
|
* - `have_git_dir()` should not have to exist at all. Instead, we should
|
|
|
|
* decide on whether or not we have a `struct repository`.
|
|
|
|
*
|
|
|
|
* - All the global config variables should become tied to a repository. Like
|
|
|
|
* this, we'd correctly honor repository-local configuration and be able to
|
|
|
|
* distinguish configuration values from different repositories.
|
|
|
|
*
|
|
|
|
* Please do not add new global config variables here.
|
|
|
|
*/
|
|
|
|
# ifdef USE_THE_REPOSITORY_VARIABLE
|
2023-03-21 14:26:03 +08:00
|
|
|
void setup_git_env(const char *git_dir);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Returns true iff we have a configured git repository (either via
|
|
|
|
* setup_git_directory, or in the environment via $GIT_DIR).
|
|
|
|
*/
|
|
|
|
int have_git_dir(void);
|
|
|
|
|
2024-09-12 19:29:59 +08:00
|
|
|
/*
|
|
|
|
* Accessors for the core.sharedrepository config which lazy-load the value
|
|
|
|
* from the config (if not already set). The "reset" function can be
|
|
|
|
* used to unset "set" or cached value, meaning that the value will be loaded
|
|
|
|
* fresh from the config file on the next call to get_shared_repository().
|
|
|
|
*/
|
|
|
|
void set_shared_repository(int value);
|
|
|
|
int get_shared_repository(void);
|
|
|
|
void reset_shared_repository(void);
|
|
|
|
|
2023-03-21 14:26:03 +08:00
|
|
|
extern int is_bare_repository_cfg;
|
|
|
|
int is_bare_repository(void);
|
|
|
|
extern char *git_work_tree_cfg;
|
|
|
|
|
|
|
|
/* Environment bits from configuration mechanism */
|
|
|
|
extern int trust_executable_bit;
|
|
|
|
extern int trust_ctime;
|
|
|
|
extern int check_stat;
|
|
|
|
extern int has_symlinks;
|
|
|
|
extern int minimum_abbrev, default_abbrev;
|
|
|
|
extern int ignore_case;
|
|
|
|
extern int assume_unchanged;
|
|
|
|
extern int warn_on_object_refname_ambiguity;
|
|
|
|
extern char *apply_default_whitespace;
|
|
|
|
extern char *apply_default_ignorewhitespace;
|
2024-05-27 19:46:15 +08:00
|
|
|
extern char *git_attributes_file;
|
|
|
|
extern char *git_hooks_path;
|
2023-03-21 14:26:03 +08:00
|
|
|
extern int zlib_compression_level;
|
|
|
|
extern int pack_compression_level;
|
|
|
|
extern size_t packed_git_window_size;
|
|
|
|
extern size_t packed_git_limit;
|
|
|
|
extern size_t delta_base_cache_limit;
|
|
|
|
extern unsigned long big_file_threshold;
|
|
|
|
extern unsigned long pack_size_limit_cfg;
|
2023-08-31 14:21:00 +08:00
|
|
|
extern int max_allowed_tree_depth;
|
2023-03-21 14:26:03 +08:00
|
|
|
|
|
|
|
extern int core_preload_index;
|
|
|
|
extern int precomposed_unicode;
|
|
|
|
extern int protect_hfs;
|
|
|
|
extern int protect_ntfs;
|
|
|
|
|
|
|
|
extern int core_apply_sparse_checkout;
|
|
|
|
extern int core_sparse_checkout_cone;
|
|
|
|
extern int sparse_expect_files_outside_of_patterns;
|
|
|
|
|
|
|
|
enum rebase_setup_type {
|
|
|
|
AUTOREBASE_NEVER = 0,
|
|
|
|
AUTOREBASE_LOCAL,
|
|
|
|
AUTOREBASE_REMOTE,
|
|
|
|
AUTOREBASE_ALWAYS
|
|
|
|
};
|
2024-09-12 19:29:59 +08:00
|
|
|
extern enum rebase_setup_type autorebase;
|
2023-03-21 14:26:03 +08:00
|
|
|
|
|
|
|
enum push_default_type {
|
|
|
|
PUSH_DEFAULT_NOTHING = 0,
|
|
|
|
PUSH_DEFAULT_MATCHING,
|
|
|
|
PUSH_DEFAULT_SIMPLE,
|
|
|
|
PUSH_DEFAULT_UPSTREAM,
|
|
|
|
PUSH_DEFAULT_CURRENT,
|
|
|
|
PUSH_DEFAULT_UNSPECIFIED
|
|
|
|
};
|
|
|
|
extern enum push_default_type push_default;
|
|
|
|
|
|
|
|
enum object_creation_mode {
|
|
|
|
OBJECT_CREATION_USES_HARDLINKS = 0,
|
|
|
|
OBJECT_CREATION_USES_RENAMES = 1
|
|
|
|
};
|
|
|
|
extern enum object_creation_mode object_creation_mode;
|
|
|
|
|
2023-07-21 20:41:56 +08:00
|
|
|
extern int grafts_keep_true_parents;
|
2023-03-21 14:26:03 +08:00
|
|
|
|
|
|
|
extern int repository_format_precious_objects;
|
|
|
|
|
|
|
|
const char *get_log_output_encoding(void);
|
|
|
|
const char *get_commit_output_encoding(void);
|
|
|
|
|
2024-05-27 19:46:39 +08:00
|
|
|
extern char *git_commit_encoding;
|
|
|
|
extern char *git_log_output_encoding;
|
2023-03-21 14:26:03 +08:00
|
|
|
|
2024-05-27 19:46:39 +08:00
|
|
|
extern char *editor_program;
|
|
|
|
extern char *askpass_program;
|
2024-05-27 19:46:15 +08:00
|
|
|
extern char *excludes_file;
|
2023-03-21 14:26:03 +08:00
|
|
|
|
|
|
|
/*
|
2024-09-12 19:29:59 +08:00
|
|
|
* The character that begins a commented line in user-editable file
|
|
|
|
* that is subject to stripspace.
|
2023-03-21 14:26:03 +08:00
|
|
|
*/
|
2024-09-12 19:29:59 +08:00
|
|
|
extern const char *comment_line_str;
|
|
|
|
extern char *comment_line_str_to_free;
|
|
|
|
extern int auto_comment_line_char;
|
2023-03-21 14:26:03 +08:00
|
|
|
|
2024-09-12 19:30:01 +08:00
|
|
|
# endif /* USE_THE_REPOSITORY_VARIABLE */
|
|
|
|
#endif /* ENVIRONMENT_H */
|