[PATCH v1 1/3] environment: migrate minimum_abbrev and default_abbrev

Tian Yuchen <[email protected]>
Newsgroups org.kernel.vger.git
Message-ID <[email protected]>
Move the global 'minimum_abbrev' and 'default_abbrev' configurations
into the repository-specific 'repo_config_values'
struct.

To ensure code readability, the getter functions
'repo_minimum_abbrev()' and 'repo_default_abbrev()' have been introduced.
The existing MINIMUM_ABBREV and DEFAULT_ABBREV macros are redefined to
the corresponding getters.

Additionally, some subsystems forbid the direct use of 'the_repository'
and must pass their own local 'repo'. Let the getters explicitly intercept
these instances.

Mentored-by: Christian Couder <[email protected]>
Mentored-by: Ayush Chandekar <[email protected]>
Mentored-by: Olamide Caleb Bello <[email protected]>
Signed-off-by: Tian Yuchen <[email protected]>
---
 environment.c | 31 ++++++++++++++++++++++++++-----
 environment.h |  6 +++++-
 merge-ort.c   |  7 ++++---
 object-name.h |  4 ++--
 replay.c      |  2 +-
 sequencer.c   |  5 +++--
 6 files changed, 41 insertions(+), 14 deletions(-)

diff --git a/environment.c b/environment.c
index c663113e8a..2b44778b50 100644
--- a/environment.c
+++ b/environment.c
@@ -43,7 +43,6 @@ static int zlib_compression_seen;
 
 int trust_executable_bit = 1;
 int has_symlinks = 1;
-int minimum_abbrev = 4, default_abbrev = -1;
 int assume_unchanged;
 char *git_commit_encoding;
 char *git_log_output_encoding;
@@ -148,6 +147,26 @@ int repo_ignore_case(struct repository *repo)
 		0;
 }
 
+int repo_minimum_abbrev(struct repository *repo)
+{
+	if (repo != the_repository)
+		repo = the_repository;
+
+	return repo->initialized
+		? repo_config_values(repo)->minimum_abbrev
+		: 4;
+}
+
+int repo_default_abbrev(struct repository *repo)
+{
+	if (repo != the_repository)
+		repo = the_repository;
+
+	return repo->initialized
+		? repo_config_values(repo)->default_abbrev
+		: -1;
+}
+
 int have_git_dir(void)
 {
 	return startup_info->have_repository
@@ -364,14 +383,14 @@ int git_default_core_config(const char *var, const char *value,
 		if (!value)
 			return config_error_nonbool(var);
 		if (!strcasecmp(value, "auto"))
-			default_abbrev = -1;
+			cfg->default_abbrev = -1;
 		else if (!git_parse_maybe_bool_text(value))
-			default_abbrev = GIT_MAX_HEXSZ;
+			cfg->default_abbrev = GIT_MAX_HEXSZ;
 		else {
 			int abbrev = git_config_int(var, value, ctx->kvi);
-			if (abbrev < minimum_abbrev)
+			if (abbrev < cfg->minimum_abbrev)
 				return error(_("abbrev length out of range: %d"), abbrev);
-			default_abbrev = abbrev;
+			cfg->default_abbrev = abbrev;
 		}
 		return 0;
 	}
@@ -738,6 +757,8 @@ void repo_config_values_init(struct repo_config_values *cfg)
 	cfg->check_stat = 1;
 	cfg->zlib_compression_level = Z_BEST_SPEED;
 	cfg->pack_compression_level = Z_DEFAULT_COMPRESSION;
+	cfg->minimum_abbrev = 4;
+	cfg->default_abbrev = -1;
 	cfg->precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */
 	cfg->core_sparse_checkout_cone = 0;
 	cfg->sparse_expect_files_outside_of_patterns = 0;
diff --git a/environment.h b/environment.h
index acfb670be1..c5905d8b01 100644
--- a/environment.h
+++ b/environment.h
@@ -95,6 +95,8 @@ struct repo_config_values {
 	int check_stat;
 	int zlib_compression_level;
 	int pack_compression_level;
+	int minimum_abbrev;
+	int default_abbrev;
 	int precomposed_unicode;
 	int core_sparse_checkout_cone;
 	int warn_on_object_refname_ambiguity;
@@ -151,6 +153,9 @@ int repo_protect_ntfs(struct repository *repo);
  */
 int repo_ignore_case(struct repository *repo);
 
+int repo_minimum_abbrev(struct repository *repo);
+int repo_default_abbrev(struct repository *repo);
+
 void repo_config_values_init(struct repo_config_values *cfg);
 
 int is_bare_repository(struct repository *repo);
@@ -180,7 +185,6 @@ int have_git_dir(void);
 /* Environment bits from configuration mechanism */
 extern int trust_executable_bit;
 extern int has_symlinks;
-extern int minimum_abbrev, default_abbrev;
 extern int assume_unchanged;
 extern char *apply_default_whitespace;
 extern char *apply_default_ignorewhitespace;
diff --git a/merge-ort.c b/merge-ort.c
index c410a5d353..b94ebcc2de 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -777,7 +777,7 @@ static void format_commit(struct strbuf *sb,
 {
 	struct merge_remote_desc *desc;
 	struct pretty_print_context ctx = {0};
-	ctx.abbrev = DEFAULT_ABBREV;
+	ctx.abbrev = repo_default_abbrev(repo);
 
 	strbuf_addchars(sb, ' ', indent);
 	desc = merge_remote_util(commit);
@@ -2035,7 +2035,8 @@ static int merge_submodule(struct merge_options *opt,
 		util->flag = sub_flag;
 		util->abbrev = NULL;
 		if (!sub_not_initialized) {
-			abbrev = repo_find_unique_abbrev(&subrepo, b, DEFAULT_ABBREV);
+			abbrev = repo_find_unique_abbrev(&subrepo, b,
+							repo_default_abbrev(opt->repo));
 			util->abbrev = xstrdup(abbrev);
 		}
 		string_list_append(csub, path)->util = util;
@@ -5348,7 +5349,7 @@ static void merge_ort_internal(struct merge_options *opt,
 	} else {
 		strbuf_add_unique_abbrev(&merge_base_abbrev,
 					 &merged_merge_bases->object.oid,
-					 DEFAULT_ABBREV);
+					 repo_default_abbrev(opt->repo));
 		ancestor_name = merge_base_abbrev.buf;
 	}
 
diff --git a/object-name.h b/object-name.h
index 167a9154ea..a6d7206ed8 100644
--- a/object-name.h
+++ b/object-name.h
@@ -133,8 +133,8 @@ struct object *repo_peel_to_type(struct repository *r,
 				 struct object *o, enum object_type);
 
 /* Convert to/from hex/sha1 representation */
-#define MINIMUM_ABBREV minimum_abbrev
-#define DEFAULT_ABBREV default_abbrev
+#define MINIMUM_ABBREV repo_minimum_abbrev(the_repository)
+#define DEFAULT_ABBREV repo_default_abbrev(the_repository)
 
 /* used when the code does not know or care what the default abbrev is */
 #define FALLBACK_DEFAULT_ABBREV 7
diff --git a/replay.c b/replay.c
index 463c900d6c..cd41c7f507 100644
--- a/replay.c
+++ b/replay.c
@@ -27,7 +27,7 @@ static const char *short_commit_name(struct repository *repo,
 				     struct commit *commit)
 {
 	return repo_find_unique_abbrev(repo, &commit->object.oid,
-				       DEFAULT_ABBREV);
+				       repo_default_abbrev(repo));
 }
 
 static struct commit *peel_committish(struct repository *repo,
diff --git a/sequencer.c b/sequencer.c
index 1355a99a09..2426c5e422 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -5813,7 +5813,7 @@ static const char *label_oid(struct object_id *oid, const char *label,
 		label = p = state->buf.buf;
 
 		repo_find_unique_abbrev_r(the_repository, p, oid,
-					  default_abbrev);
+					  repo_default_abbrev(the_repository));
 
 		/*
 		 * We may need to extend the abbreviated hash so that there is
@@ -5875,7 +5875,8 @@ static const char *label_oid(struct object_id *oid, const char *label,
 				strbuf_addch(buf, '-');
 		if (!buf->len) {
 			strbuf_addstr(buf, "rev-");
-			strbuf_add_unique_abbrev(buf, oid, default_abbrev);
+			strbuf_add_unique_abbrev(buf, oid,
+						 repo_default_abbrev(the_repository));
 		}
 		label = buf->buf;
 
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.