[Outreachy PATCH v4 3/3] environment: move "branch.autoSetupMerge" into `struct repo_config_values`
- From
Olamide Caleb Bello <belkid98@gmail.com>
- Date
- Jan 24, 2026, 11:55 UTC
- Message-ID
- <c74973d6e97745451ef54616a3d35d0e2a67cf8a.1769252118.git.belkid98@gmail.com>
- In-Reply-To
- <cover.1769252118.git.belkid98@gmail.com>
The config value `brach.autoSetupMerge` is parsed in `git_default_branch_config()` and stored in the global variable `git_branch_track`. This global variable can be overwritten by another repository when multiple Git repos run in the the same process.
Move this value into `struct repo_config_values` in the_repository to retain current behaviours and move towards libifying Git. Since the variable is no longer a global variable, it has been renamed to `branch_track` in the struct `repo_config_values`.
Suggested-by: Phillip Wood <phillip.wood123@gmail.com> Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Usman Akinyemi <usmanakinyemi202@gmail.com> Signed-off-by: Olamide Caleb Bello <belkid98@gmail.com> --- branch.h | 2 -- builtin/branch.c | 2 +- builtin/checkout.c | 2 +- builtin/push.c | 2 +- builtin/submodule--helper.c | 2 +- environment.c | 12 +++++++----- environment.h | 4 ++++ 7 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/branch.h b/branch.h index ec2f35fda4..3dc6e2a0ff 100644 --- a/branch.h +++ b/branch.h @@ -15,8 +15,6 @@ enum branch_track { BRANCH_TRACK_SIMPLE, }; -extern enum branch_track git_branch_track; - /* Functions for acting on the information about branches. */ /** diff --git a/builtin/branch.c b/builtin/branch.c index c577b5d20f..7d27951a7e 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -795,7 +795,7 @@ int cmd_branch(int argc, if (!sorting_options.nr) string_list_append(&sorting_options, "refname"); - track = git_branch_track; + track = the_repository->config_values.branch_track; head = refs_resolve_refdup(get_main_ref_store(the_repository), "HEAD", 0, &head_oid, NULL); diff --git a/builtin/checkout.c b/builtin/checkout.c index 261699e2f5..ba6fea9aee 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1631,7 +1631,7 @@ static int checkout_branch(struct checkout_opts *opts, if (opts->track != BRANCH_TRACK_UNSPECIFIED) die(_("'%s' cannot be used with '%s'"), "--detach", "-t"); } else if (opts->track == BRANCH_TRACK_UNSPECIFIED) - opts->track = git_branch_track; + opts->track = the_repository->config_values.branch_track; if (new_branch_info->name && !new_branch_info->commit) die(_("Cannot switch branch to a non-commit '%s'"), diff --git a/builtin/push.c b/builtin/push.c index 5b6cebbb85..7be20a1035 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -162,7 +162,7 @@ static NORETURN void die_push_simple(struct branch *branch, advice_pushdefault_maybe = _("\n" "To choose either option permanently, " "see push.default in 'git help config'.\n"); - if (git_branch_track != BRANCH_TRACK_SIMPLE) + if (the_repository->config_values.branch_track != BRANCH_TRACK_SIMPLE) advice_automergesimple_maybe = _("\n" "To avoid automatically configuring " "an upstream branch when its name\n" diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index d537ab087a..f2b6f027d7 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -3128,7 +3128,7 @@ static int module_create_branch(int argc, const char **argv, const char *prefix, }; repo_config(the_repository, git_default_config, NULL); - track = git_branch_track; + track = the_repository->config_values.branch_track; argc = parse_options(argc, argv, prefix, options, usage, 0); if (argc != 3) diff --git a/environment.c b/environment.c index 269cac6d6e..de8721657e 100644 --- a/environment.c +++ b/environment.c @@ -66,7 +66,6 @@ enum auto_crlf auto_crlf = AUTO_CRLF_FALSE; enum eol core_eol = EOL_UNSET; int global_conv_flags_eol = CONV_EOL_RNDTRP_WARN; char *check_roundtrip_encoding; -enum branch_track git_branch_track = BRANCH_TRACK_REMOTE; enum rebase_setup_type autorebase = AUTOREBASE_NEVER; enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED; #ifndef OBJECT_CREATION_MODE @@ -607,18 +606,20 @@ static int git_default_i18n_config(const char *var, const char *value) static int git_default_branch_config(const char *var, const char *value) { + struct repo_config_values *cfg = &the_repository->config_values; + if (!strcmp(var, "branch.autosetupmerge")) { if (value && !strcmp(value, "always")) { - git_branch_track = BRANCH_TRACK_ALWAYS; + cfg->branch_track = BRANCH_TRACK_ALWAYS; return 0; } else if (value && !strcmp(value, "inherit")) { - git_branch_track = BRANCH_TRACK_INHERIT; + cfg->branch_track = BRANCH_TRACK_INHERIT; return 0; } else if (value && !strcmp(value, "simple")) { - git_branch_track = BRANCH_TRACK_SIMPLE; + cfg->branch_track = BRANCH_TRACK_SIMPLE; return 0; } - git_branch_track = git_config_bool(var, value); + cfg->branch_track = git_config_bool(var, value); return 0; } if (!strcmp(var, "branch.autosetuprebase")) { @@ -761,4 +762,5 @@ void repo_config_values_init(struct repo_config_values *cfg) { cfg->attributes_file = NULL; cfg->apply_sparse_checkout = 0; + cfg->branch_track = BRANCH_TRACK_REMOTE; } diff --git a/environment.h b/environment.h index ddce69c6ba..27161d56ab 100644 --- a/environment.h +++ b/environment.h @@ -2,6 +2,7 @@ #define ENVIRONMENT_H #include "repo-settings.h" +#include "branch.h" /* Double-check local_repo_env below if you add to this list. */ #define GIT_DIR_ENVIRONMENT "GIT_DIR" @@ -88,6 +89,9 @@ struct repo_config_values { /* section "core" config values */ char *attributes_file; int apply_sparse_checkout; + + /* section "branch" config values */ + enum branch_track branch_track; }; /*
-- 2.34.1