environment: stop storing "core.preferSymlinkRefs" globally

Same as the preceding commit, storing the "core.preferSymlinkRefs" value
globally is misdesigned as this setting may be set per repository.

There is only a single user of this value anyway, namely the "files"
backend. So let's just remove the global variable and read the value of
this setting when initializing the backend.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-09-12 13:30:21 +02:00 committed by Junio C Hamano
parent eafb126456
commit 8e2e8a33f3
4 changed files with 4 additions and 8 deletions

View File

@ -1447,11 +1447,6 @@ static int git_default_core_config(const char *var, const char *value,
return 0; return 0;
} }
if (!strcmp(var, "core.prefersymlinkrefs")) {
prefer_symlink_refs = git_config_bool(var, value);
return 0;
}
if (!strcmp(var, "core.warnambiguousrefs")) { if (!strcmp(var, "core.warnambiguousrefs")) {
warn_ambiguous_refs = git_config_bool(var, value); warn_ambiguous_refs = git_config_bool(var, value);
return 0; return 0;

View File

@ -34,7 +34,6 @@ int has_symlinks = 1;
int minimum_abbrev = 4, default_abbrev = -1; int minimum_abbrev = 4, default_abbrev = -1;
int ignore_case; int ignore_case;
int assume_unchanged; int assume_unchanged;
int prefer_symlink_refs;
int is_bare_repository_cfg = -1; /* unspecified */ int is_bare_repository_cfg = -1; /* unspecified */
int warn_ambiguous_refs = 1; int warn_ambiguous_refs = 1;
int warn_on_object_refname_ambiguity = 1; int warn_on_object_refname_ambiguity = 1;

View File

@ -156,7 +156,6 @@ extern int has_symlinks;
extern int minimum_abbrev, default_abbrev; extern int minimum_abbrev, default_abbrev;
extern int ignore_case; extern int ignore_case;
extern int assume_unchanged; extern int assume_unchanged;
extern int prefer_symlink_refs;
extern int warn_ambiguous_refs; extern int warn_ambiguous_refs;
extern int warn_on_object_refname_ambiguity; extern int warn_on_object_refname_ambiguity;
extern char *apply_default_whitespace; extern char *apply_default_whitespace;

View File

@ -1,6 +1,7 @@
#define USE_THE_REPOSITORY_VARIABLE #define USE_THE_REPOSITORY_VARIABLE
#include "../git-compat-util.h" #include "../git-compat-util.h"
#include "../config.h"
#include "../copy.h" #include "../copy.h"
#include "../environment.h" #include "../environment.h"
#include "../gettext.h" #include "../gettext.h"
@ -76,6 +77,7 @@ struct files_ref_store {
char *gitcommondir; char *gitcommondir;
enum log_refs_config log_all_ref_updates; enum log_refs_config log_all_ref_updates;
int prefer_symlink_refs;
struct ref_cache *loose; struct ref_cache *loose;
@ -109,6 +111,7 @@ static struct ref_store *files_ref_store_init(struct repository *repo,
refs->packed_ref_store = refs->packed_ref_store =
packed_ref_store_init(repo, refs->gitcommondir, flags); packed_ref_store_init(repo, refs->gitcommondir, flags);
refs->log_all_ref_updates = repo_settings_get_log_all_ref_updates(repo); refs->log_all_ref_updates = repo_settings_get_log_all_ref_updates(repo);
repo_config_get_bool(repo, "core.prefersymlinkrefs", &refs->prefer_symlink_refs);
chdir_notify_reparent("files-backend $GIT_DIR", &refs->base.gitdir); chdir_notify_reparent("files-backend $GIT_DIR", &refs->base.gitdir);
chdir_notify_reparent("files-backend $GIT_COMMONDIR", chdir_notify_reparent("files-backend $GIT_COMMONDIR",
@ -2942,7 +2945,7 @@ static int files_transaction_finish(struct ref_store *ref_store,
* We try creating a symlink, if that succeeds we continue to the * We try creating a symlink, if that succeeds we continue to the
* next update. If not, we try and create a regular symref. * next update. If not, we try and create a regular symref.
*/ */
if (update->new_target && prefer_symlink_refs) if (update->new_target && refs->prefer_symlink_refs)
if (!create_ref_symlink(lock, update->new_target)) if (!create_ref_symlink(lock, update->new_target))
continue; continue;