From 8792ccb40bc3751e3903a4bcaf3bce489c28a5b2 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Mon, 30 Mar 2026 15:17:37 +0200 Subject: [PATCH] setup: stop using `the_repository` in `check_repository_format()` Stop using `the_repository` in `check_repository_format()` and instead accept the repository as a parameter. The injection of `the_repository` is thus bumped one level higher, where callers now pass it in explicitly. Furthermore, the function is never used outside "setup.c". Drop its declaration in "setup.h" and make it static. Note that this requires us to reorder the function. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- setup.c | 58 ++++++++++++++++++++++++++++++++------------------------- setup.h | 10 ---------- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/setup.c b/setup.c index 6dbd096f20..c32d6e96bb 100644 --- a/setup.c +++ b/setup.c @@ -1755,6 +1755,37 @@ enum discovery_result discover_git_directory_reason(struct strbuf *commondir, return result; } +/* + * Check the repository format version in the path found in repo_get_git_dir(the_repository), + * and die if it is a version we don't understand. Generally one would + * set_git_dir() before calling this, and use it only for "are we in a valid + * repo?". + * + * If successful and fmt is not NULL, fill fmt with data. + */ +static void check_repository_format(struct repository *repo, struct repository_format *fmt) +{ + struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT; + if (!fmt) + fmt = &repo_fmt; + check_repository_format_gently(repo, repo_get_git_dir(repo), fmt, NULL); + startup_info->have_repository = 1; + repo_set_hash_algo(repo, fmt->hash_algo); + repo_set_compat_hash_algo(repo, fmt->compat_hash_algo); + repo_set_ref_storage_format(repo, + fmt->ref_storage_format, + fmt->ref_storage_payload); + repo->repository_format_worktree_config = + fmt->worktree_config; + repo->repository_format_submodule_path_cfg = + fmt->submodule_path_cfg; + repo->repository_format_relative_worktrees = + fmt->relative_worktrees; + repo->repository_format_partial_clone = + xstrdup_or_null(fmt->partial_clone); + clear_repository_format(&repo_fmt); +} + const char *enter_repo(struct repository *repo, const char *path, unsigned flags) { static struct strbuf validated_path = STRBUF_INIT; @@ -1829,7 +1860,7 @@ const char *enter_repo(struct repository *repo, const char *path, unsigned flags if (is_git_directory(".")) { set_git_dir(repo, ".", 0); - check_repository_format(NULL); + check_repository_format(repo, NULL); return path; } @@ -2104,29 +2135,6 @@ int git_config_perm(const char *var, const char *value) return -(i & 0666); } -void check_repository_format(struct repository_format *fmt) -{ - struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT; - if (!fmt) - fmt = &repo_fmt; - check_repository_format_gently(the_repository, repo_get_git_dir(the_repository), fmt, NULL); - startup_info->have_repository = 1; - repo_set_hash_algo(the_repository, fmt->hash_algo); - repo_set_compat_hash_algo(the_repository, fmt->compat_hash_algo); - repo_set_ref_storage_format(the_repository, - fmt->ref_storage_format, - fmt->ref_storage_payload); - the_repository->repository_format_worktree_config = - fmt->worktree_config; - the_repository->repository_format_submodule_path_cfg = - fmt->submodule_path_cfg; - the_repository->repository_format_relative_worktrees = - fmt->relative_worktrees; - the_repository->repository_format_partial_clone = - xstrdup_or_null(fmt->partial_clone); - clear_repository_format(&repo_fmt); -} - /* * Returns the "prefix", a path to the current working directory * relative to the work tree root, or NULL, if the current working @@ -2801,7 +2809,7 @@ int init_db(const char *git_dir, const char *real_git_dir, * config file, so this will not fail. What we are catching * is an attempt to reinitialize new repository with an old tool. */ - check_repository_format(&repo_fmt); + check_repository_format(the_repository, &repo_fmt); repository_format_configure(the_repository, &repo_fmt, hash, ref_storage_format); diff --git a/setup.h b/setup.h index b779661ce7..a820041af0 100644 --- a/setup.h +++ b/setup.h @@ -221,16 +221,6 @@ void clear_repository_format(struct repository_format *format); int verify_repository_format(const struct repository_format *format, struct strbuf *err); -/* - * Check the repository format version in the path found in repo_get_git_dir(the_repository), - * and die if it is a version we don't understand. Generally one would - * set_git_dir() before calling this, and use it only for "are we in a valid - * repo?". - * - * If successful and fmt is not NULL, fill fmt with data. - */ -void check_repository_format(struct repository_format *fmt); - const char *get_template_dir(const char *option_template); #define INIT_DB_QUIET (1 << 0)