environment: move editor_program into repo_config_values
The global variable 'editor_program' holds the path to the user's preferred editor. Move 'editor_program' into 'struct repo_config_values' to continue the libification effort. There have been discussions on whether external programs like editors truly need to be configured on a per-repository basis within the same process. While a single process might rarely invoke different editors, this migration is necessary for two reasons: 1. Developers frequently use different toolchains for different projects. Per-repo configuration respects this. 2. Moving this string into 'repo_config_values' eliminates mutable global state. As the codebase moves toward becoming a long-running processes, managing multiple repositories concurrently must not overwrite each other's program configurations. No standalone getter function is introduced. Callers directly access the field via 'repo_config_values()'. Heap memory is safely reclaimed in 'repo_config_values_clear()'. Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Ayush Chandekar <ayu.chandekar@gmail.com> Mentored-by: Olamide Caleb Bello <belkid98@gmail.com> Signed-off-by: Tian Yuchen <cat@malon.dev> Signed-off-by: Junio C Hamano <gitster@pobox.com>next
parent
7488b9d1fd
commit
469e95c257
4
editor.c
4
editor.c
|
|
@ -29,8 +29,8 @@ const char *git_editor(void)
|
|||
const char *editor = getenv("GIT_EDITOR");
|
||||
int terminal_is_dumb = is_terminal_dumb();
|
||||
|
||||
if (!editor && editor_program)
|
||||
editor = editor_program;
|
||||
if (!editor)
|
||||
editor = repo_config_values(the_repository)->editor_program;
|
||||
if (!editor && !terminal_is_dumb)
|
||||
editor = getenv("VISUAL");
|
||||
if (!editor)
|
||||
|
|
|
|||
|
|
@ -55,7 +55,6 @@ int fsync_object_files = -1;
|
|||
int use_fsync = -1;
|
||||
enum fsync_method fsync_method = FSYNC_METHOD_DEFAULT;
|
||||
enum fsync_component fsync_components = FSYNC_COMPONENTS_DEFAULT;
|
||||
char *editor_program;
|
||||
char *askpass_program;
|
||||
enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
|
||||
enum eol core_eol = EOL_UNSET;
|
||||
|
|
@ -437,8 +436,8 @@ int git_default_core_config(const char *var, const char *value,
|
|||
}
|
||||
|
||||
if (!strcmp(var, "core.editor")) {
|
||||
FREE_AND_NULL(editor_program);
|
||||
return git_config_string(&editor_program, var, value);
|
||||
FREE_AND_NULL(cfg->editor_program);
|
||||
return git_config_string(&cfg->editor_program, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.commentchar") ||
|
||||
|
|
@ -725,6 +724,7 @@ void repo_config_values_init(struct repo_config_values *cfg)
|
|||
{
|
||||
cfg->attributes_file = NULL;
|
||||
cfg->excludes_file = NULL;
|
||||
cfg->editor_program = NULL;
|
||||
cfg->apply_sparse_checkout = 0;
|
||||
cfg->branch_track = BRANCH_TRACK_REMOTE;
|
||||
cfg->trust_ctime = 1;
|
||||
|
|
@ -741,4 +741,5 @@ void repo_config_values_clear(struct repo_config_values *cfg)
|
|||
{
|
||||
FREE_AND_NULL(cfg->attributes_file);
|
||||
FREE_AND_NULL(cfg->excludes_file);
|
||||
FREE_AND_NULL(cfg->editor_program);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ struct repo_config_values {
|
|||
/* section "core" config values */
|
||||
char *attributes_file;
|
||||
char *excludes_file;
|
||||
char *editor_program;
|
||||
int apply_sparse_checkout;
|
||||
int trust_ctime;
|
||||
int check_stat;
|
||||
|
|
@ -218,7 +219,6 @@ const char *get_commit_output_encoding(void);
|
|||
extern char *git_commit_encoding;
|
||||
extern char *git_log_output_encoding;
|
||||
|
||||
extern char *editor_program;
|
||||
extern char *askpass_program;
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue