[PATCH 5/6] config: move has_symlinks to global config
From: Derrick Stolee via GitGitGadget <hidden>
Date: 2023-06-02 14:34:01
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Derrick Stolee <redacted> Signed-off-by: Derrick Stolee <redacted> --- apply.c | 3 ++- builtin/difftool.c | 4 ++-- cache.h | 4 ++-- combine-diff.c | 2 +- config.c | 5 ----- entry.c | 3 ++- environment.c | 1 - environment.h | 1 - global-config.c | 2 ++ global-config.h | 1 + merge-recursive.c | 3 ++- read-cache.c | 5 +++-- 12 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/apply.c b/apply.c
index 3636bc14c2d..17092d2bb12 100644
--- a/apply.c
+++ b/apply.c@@ -4384,7 +4384,8 @@ static int try_create_file(struct apply_state *state, const char *path, return !!mkdir(path, 0777); } - if (has_symlinks && S_ISLNK(mode)) + if (get_int_config_global(INT_CONFIG_HAS_SYMLINKS) && + S_ISLNK(mode)) /* Although buf:size is counted string, it also is NUL * terminated. */
diff --git a/builtin/difftool.c b/builtin/difftool.c
index f09d24d37f9..f51c9f71d5d 100644
--- a/builtin/difftool.c
+++ b/builtin/difftool.c@@ -292,7 +292,7 @@ static char *get_symlink(const struct object_id *oid, const char *path) if (is_null_oid(oid)) { /* The symlink is unknown to Git so read from the filesystem */ struct strbuf link = STRBUF_INIT; - if (has_symlinks) { + if (get_int_config_global(INT_CONFIG_HAS_SYMLINKS)) { if (strbuf_readlink(&link, path, strlen(path))) die(_("could not read symlink %s"), path); } else if (strbuf_read_file(&link, path, 128))
@@ -723,7 +723,7 @@ int cmd_difftool(int argc, const char **argv, const char *prefix) struct child_process child = CHILD_PROCESS_INIT; git_config(difftool_config, NULL); - symlinks = has_symlinks; + symlinks = get_int_config_global(INT_CONFIG_HAS_SYMLINKS); argc = parse_options(argc, argv, prefix, builtin_difftool_options, builtin_difftool_usage, PARSE_OPT_KEEP_UNKNOWN_OPT |
diff --git a/cache.h b/cache.h
index 3e737d12ea8..4d270e114a2 100644
--- a/cache.h
+++ b/cache.h@@ -161,10 +161,10 @@ static inline unsigned create_ce_flags(unsigned stage) static inline unsigned int ce_mode_from_stat(const struct cache_entry *ce, unsigned int mode) { - extern int has_symlinks; int trust_executable_bit; - if (!has_symlinks && S_ISREG(mode) && + if (!get_int_config_global(INT_CONFIG_HAS_SYMLINKS) && + S_ISREG(mode) && ce && S_ISLNK(ce->ce_mode)) return ce->ce_mode;
diff --git a/combine-diff.c b/combine-diff.c
index f7e9fb57473..1de0a340b24 100644
--- a/combine-diff.c
+++ b/combine-diff.c@@ -1086,7 +1086,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent, /* if symlinks don't work, assume symlink if all parents * are symlinks */ - is_file = has_symlinks; + is_file = get_int_config_global(INT_CONFIG_HAS_SYMLINKS); for (i = 0; !is_file && i < num_parent; i++) is_file = !S_ISLNK(elem->parent[i].mode); if (!is_file)
diff --git a/config.c b/config.c
index 6b4051a4eae..e104bc704ae 100644
--- a/config.c
+++ b/config.c@@ -1568,11 +1568,6 @@ static int git_default_core_config(const char *var, const char *value, void *cb) check_stat = 0; } - if (!strcmp(var, "core.symlinks")) { - has_symlinks = git_config_bool(var, value); - return 0; - } - if (!strcmp(var, "core.ignorecase")) { ignore_case = git_config_bool(var, value); return 0;
diff --git a/entry.c b/entry.c
index d89e61fa641..0c33aeb8aa9 100644
--- a/entry.c
+++ b/entry.c@@ -308,7 +308,8 @@ static int write_entry(struct cache_entry *ce, char *path, struct conv_attrs *ca * We can't make a real symlink; write out a regular file entry * with the symlink destination as its contents. */ - if (!has_symlinks || to_tempfile) + if (!get_int_config_global(INT_CONFIG_HAS_SYMLINKS) || + to_tempfile) goto write_file_entry; ret = symlink(new_blob, path);
diff --git a/environment.c b/environment.c
index f42f79f7f1b..312e006feb0 100644
--- a/environment.c
+++ b/environment.c@@ -31,7 +31,6 @@ #include "write-or-die.h" int check_stat = 1; -int has_symlinks = 1; int minimum_abbrev = 4, default_abbrev = -1; int ignore_case; int assume_unchanged;
diff --git a/environment.h b/environment.h
index 362681f63e7..fb2cfa9c1aa 100644
--- a/environment.h
+++ b/environment.h@@ -112,7 +112,6 @@ void set_git_work_tree(const char *tree); /* Environment bits from configuration mechanism */ extern int check_stat; -extern int has_symlinks; extern int minimum_abbrev, default_abbrev; extern int ignore_case; extern int assume_unchanged;
diff --git a/global-config.c b/global-config.c
index 395d21e0381..526ced5b24c 100644
--- a/global-config.c
+++ b/global-config.c@@ -7,6 +7,7 @@ static int global_ints[] = { [INT_CONFIG_TRUST_EXECUTABLE_BIT] = 1, [INT_CONFIG_TRUST_CTIME] = 1, [INT_CONFIG_QUOTE_PATH_FULLY] = 1, + [INT_CONFIG_HAS_SYMLINKS] = 1, }; /* Bitmask for the enum. */
@@ -17,6 +18,7 @@ static const char *global_int_names[] = { [INT_CONFIG_TRUST_EXECUTABLE_BIT] = "core.filemode", [INT_CONFIG_TRUST_CTIME] = "core.trustctime", [INT_CONFIG_QUOTE_PATH_FULLY] = "core.quotepath", + [INT_CONFIG_HAS_SYMLINKS] = "core.symlinks", }; static int config_available;
diff --git a/global-config.h b/global-config.h
index fbe5fccb1a1..2532f426e2b 100644
--- a/global-config.h
+++ b/global-config.h@@ -6,6 +6,7 @@ enum int_config_key { INT_CONFIG_TRUST_EXECUTABLE_BIT, INT_CONFIG_TRUST_CTIME, INT_CONFIG_QUOTE_PATH_FULLY, + INT_CONFIG_HAS_SYMLINKS, }; /**
diff --git a/merge-recursive.c b/merge-recursive.c
index 9875bdb11cb..10fdd14a642 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c@@ -983,7 +983,8 @@ static int update_file_flags(struct merge_options *opt, goto free_buf; } if (S_ISREG(contents->mode) || - (!has_symlinks && S_ISLNK(contents->mode))) { + (!get_int_config_global(INT_CONFIG_HAS_SYMLINKS) && + S_ISLNK(contents->mode))) { int fd; int mode = (contents->mode & 0100 ? 0777 : 0666);
diff --git a/read-cache.c b/read-cache.c
index 9e5a6ba2c76..b80a54133f9 100644
--- a/read-cache.c
+++ b/read-cache.c@@ -344,7 +344,8 @@ static int ce_match_stat_basic(const struct cache_entry *ce, struct stat *st) break; case S_IFLNK: if (!S_ISLNK(st->st_mode) && - (has_symlinks || !S_ISREG(st->st_mode))) + (get_int_config_global(INT_CONFIG_HAS_SYMLINKS) || + !S_ISREG(st->st_mode))) changed |= TYPE_CHANGED; break; case S_IFGITLINK:
@@ -809,7 +810,7 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, if (get_int_config_global(INT_CONFIG_TRUST_EXECUTABLE_BIT) && - has_symlinks) { + get_int_config_global(INT_CONFIG_HAS_SYMLINKS)) { ce->ce_mode = create_ce_mode(st_mode); } else { /* If there is an existing entry, pick the mode bits and type
--
gitgitgadget