setup: stop using the_repository in setup_git_directory()

Stop using `the_repository` in `setup_git_directory()` 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.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2026-03-30 15:17:35 +02:00
committed by Junio C Hamano
parent bfd4afe0d5
commit 75f1d6fbfb
40 changed files with 49 additions and 47 deletions

View File

@@ -786,7 +786,7 @@ int write_archive(int argc, const char **argv, const char *prefix,
* die ourselves; but its error message will be more specific
* than what we could write here.
*/
setup_git_directory();
setup_git_directory(the_repository);
}
parse_treeish_arg(argv, &args, remote);

View File

@@ -1064,7 +1064,7 @@ int cmd_grep(int argc,
use_index = 0;
else
/* die the same way as if we did it at the beginning */
setup_git_directory();
setup_git_directory(the_repository);
}
/* Ignore --recurse-submodules if --no-index is given or implied */
if (!use_index)

View File

@@ -100,7 +100,7 @@ int cmd_hash_object(int argc,
hash_object_usage, 0);
if (flags & INDEX_WRITE_OBJECT)
prefix = setup_git_directory();
prefix = setup_git_directory(the_repository);
else
prefix = setup_git_directory_gently(the_repository, &nongit);

View File

@@ -110,7 +110,7 @@ int cmd_merge_file(int argc,
if (!repo && object_id)
/* emit the correct "not a git repo" error in this case */
setup_git_directory();
setup_git_directory(the_repository);
for (i = 0; i < 3; i++) {
char *fname;

View File

@@ -739,7 +739,7 @@ int cmd_rev_parse(int argc,
/* No options; just report on whether we're in a git repo or not. */
if (argc == 1) {
setup_git_directory();
setup_git_directory(the_repository);
repo_config(the_repository, git_default_config, NULL);
return 0;
}
@@ -774,7 +774,7 @@ int cmd_rev_parse(int argc,
/* The rest of the options require a git repository. */
if (!did_repo_setup) {
prefix = setup_git_directory();
prefix = setup_git_directory(the_repository);
repo_config(the_repository, git_default_config, NULL);
did_repo_setup = 1;

2
git.c
View File

@@ -477,7 +477,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv, struct
run_setup = RUN_SETUP_GENTLY;
if (run_setup & RUN_SETUP) {
prefix = setup_git_directory();
prefix = setup_git_directory(the_repository);
no_repo = 0;
} else if (run_setup & RUN_SETUP_GENTLY) {
prefix = setup_git_directory_gently(the_repository, &no_repo);

View File

@@ -1788,7 +1788,7 @@ int cmd_main(int argc, const char **argv)
if (delete_branch && rs.nr != 1)
die("You must specify only one branch name when deleting a remote branch");
gitdir = setup_git_directory();
gitdir = setup_git_directory(the_repository);
memset(remote_dir_exists, -1, 256);

View File

@@ -58,7 +58,7 @@ static void setup_enlistment_directory(int argc, const char **argv,
}
strbuf_setlen(&path, len);
setup_git_directory();
setup_git_directory(the_repository);
if (!the_repository->worktree)
die(_("Scalar enlistments require a worktree"));
@@ -514,7 +514,7 @@ static int cmd_clone(int argc, const char **argv)
goto cleanup;
}
setup_git_directory();
setup_git_directory(the_repository);
/* common-main already logs `argv` */
trace2_def_repo(the_repository);

View File

@@ -2133,9 +2133,9 @@ void check_repository_format(struct repository_format *fmt)
* directory is not a strict subdirectory of the work tree root. The
* prefix always ends with a '/' character.
*/
const char *setup_git_directory(void)
const char *setup_git_directory(struct repository *repo)
{
return setup_git_directory_gently(the_repository, NULL);
return setup_git_directory_gently(repo, NULL);
}
const char *resolve_gitdir_gently(const char *suspect, int *return_error_code)

View File

@@ -137,7 +137,7 @@ enum {
const char *enter_repo(struct repository *repo, const char *path, unsigned flags);
const char *setup_git_directory_gently(struct repository *repo, int *);
const char *setup_git_directory(void);
const char *setup_git_directory(struct repository *repo);
char *prefix_path(struct repository *repo, const char *prefix, int len, const char *path);
char *prefix_path_gently(struct repository *repo, const char *prefix, int len, int *remaining, const char *path);

View File

@@ -11,7 +11,7 @@ int cmd__advise_if_enabled(int argc, const char **argv)
if (argc != 2)
die("usage: %s <advice>", argv[0]);
setup_git_directory();
setup_git_directory(the_repository);
repo_config(the_repository, git_default_config, NULL);
/*

View File

@@ -37,7 +37,7 @@ static int bitmap_dump_pseudo_merge_objects(uint32_t n)
int cmd__bitmap(int argc, const char **argv)
{
setup_git_directory();
setup_git_directory(the_repository);
if (argc == 2 && !strcmp(argv[1], "list-commits"))
return bitmap_list_commits();

View File

@@ -52,7 +52,7 @@ static const char *const bloom_usage = "\n"
int cmd__bloom(int argc, const char **argv)
{
setup_git_directory();
setup_git_directory(the_repository);
if (argc < 2)
usage(bloom_usage);

View File

@@ -33,7 +33,7 @@ int cmd__cache_tree(int argc, const char **argv)
OPT_END()
};
setup_git_directory();
setup_git_directory(the_repository);
argc = parse_options(argc, argv, NULL, options, test_cache_tree_usage, 0);

View File

@@ -102,7 +102,7 @@ int cmd__config(int argc, const char **argv)
return 0;
}
setup_git_directory();
setup_git_directory(the_repository);
git_configset_init(&cs);

View File

@@ -66,7 +66,7 @@ int cmd__dump_cache_tree(int ac UNUSED, const char **av UNUSED)
struct cache_tree *another = cache_tree();
int ret;
setup_git_directory();
setup_git_directory(the_repository);
if (repo_read_index(the_repository) < 0)
die("unable to read index file");
istate = *the_repository->index;

View File

@@ -9,7 +9,7 @@ int cmd__dump_fsmonitor(int ac UNUSED, const char **av UNUSED)
{
struct index_state *istate = the_repository->index;
setup_git_directory();
setup_git_directory(the_repository);
if (do_read_index(istate, the_repository->index_file, 0) < 0)
die("unable to read index file");
if (!istate->fsmonitor_last_update) {

View File

@@ -17,7 +17,7 @@ int cmd__dump_split_index(int ac UNUSED, const char **av)
{
struct split_index *si;
setup_git_directory();
setup_git_directory(the_repository);
do_read_index(the_repository->index, av[1], 1);
printf("own %s\n", oid_to_hex(&the_repository->index->oid));

View File

@@ -54,7 +54,7 @@ int cmd__dump_untracked_cache(int ac UNUSED, const char **av UNUSED)
xsetenv("GIT_CONFIG_KEY_0", "core.untrackedCache", 1);
xsetenv("GIT_CONFIG_VALUE_0", "keep", 1);
setup_git_directory();
setup_git_directory(the_repository);
if (repo_read_index(the_repository) < 0)
die("unable to read index file");
uc = the_repository->index->untracked;

View File

@@ -25,7 +25,7 @@ int cmd__find_pack(int argc, const char **argv)
struct object_id oid;
struct packed_git *p;
int count = -1, actual_count = 0;
const char *prefix = setup_git_directory();
const char *prefix = setup_git_directory(the_repository);
struct option options[] = {
OPT_INTEGER('c', "check-count", &count, "expected number of packs"),

View File

@@ -210,7 +210,7 @@ int cmd__fsmonitor_client(int argc, const char **argv)
subcmd = argv[0];
setup_git_directory();
setup_git_directory(the_repository);
if (!strcmp(subcmd, "query"))
return !!do_send_query(token);

View File

@@ -211,7 +211,7 @@ int cmd__lazy_init_name_hash(int argc, const char **argv)
const char *prefix;
uint64_t avg_single, avg_multi;
prefix = setup_git_directory();
prefix = setup_git_directory(the_repository);
argc = parse_options(argc, argv, prefix, options, usage, 0);

View File

@@ -13,7 +13,7 @@ int cmd__match_trees(int ac UNUSED, const char **av)
struct object_id hash1, hash2, shifted;
struct tree *one, *two;
setup_git_directory();
setup_git_directory(the_repository);
if (repo_get_oid(the_repository, av[1], &hash1))
die("cannot parse %s as an object name", av[1]);

View File

@@ -95,7 +95,7 @@ int cmd__pack_deltas(int argc, const char **argv)
if (argc || num_objects < 0)
usage_with_options(usage_str, options);
setup_git_directory();
setup_git_directory(the_repository);
f = hashfd(the_repository->hash_algo, 1, "<stdout>");
write_pack_header(f, num_objects);

View File

@@ -32,7 +32,7 @@ int cmd__pack_mtimes(int argc, const char **argv)
struct strbuf buf = STRBUF_INIT;
struct packed_git *p;
setup_git_directory();
setup_git_directory(the_repository);
if (argc != 2)
usage(pack_mtimes_usage);

View File

@@ -1,3 +1,5 @@
#define USE_THE_REPOSITORY_VARIABLE
#include "test-tool.h"
#include "hex.h"
#include "repository.h"
@@ -32,7 +34,7 @@ static void object_info(const char *gitdir, const char *oid_hex)
int cmd__partial_clone(int argc, const char **argv)
{
setup_git_directory();
setup_git_directory(the_repository);
if (argc < 4)
die("too few arguments");

View File

@@ -89,7 +89,7 @@ int cmd__path_walk(int argc, const char **argv)
OPT_END(),
};
setup_git_directory();
setup_git_directory(the_repository);
revs.repo = the_repository;
argc = parse_options(argc, argv, NULL,

View File

@@ -39,7 +39,7 @@ int cmd__reach(int ac, const char **av)
struct strbuf buf = STRBUF_INIT;
struct repository *r = the_repository;
setup_git_directory();
setup_git_directory(the_repository);
if (ac < 2)
exit(1);

View File

@@ -19,7 +19,7 @@ int cmd__read_cache(int argc, const char **argv)
if (argc == 2)
cnt = strtol(argv[1], NULL, 0);
setup_git_directory();
setup_git_directory(the_repository);
repo_config(the_repository, git_default_config, NULL);
for (i = 0; i < cnt; i++) {

View File

@@ -76,7 +76,7 @@ int cmd__read_graph(int argc, const char **argv)
struct odb_source *source;
int ret = 0;
setup_git_directory();
setup_git_directory(the_repository);
source = the_repository->objects->sources;
prepare_repo_settings(the_repository);

View File

@@ -14,7 +14,7 @@
static struct multi_pack_index *setup_midx(const char *object_dir)
{
struct odb_source *source;
setup_git_directory();
setup_git_directory(the_repository);
source = odb_find_source(the_repository->objects, object_dir);
if (!source)
source = odb_add_to_alternates_memory(the_repository->objects,

View File

@@ -340,7 +340,7 @@ int cmd__ref_store(int argc UNUSED, const char **argv)
const char *func;
struct command *cmd;
setup_git_directory();
setup_git_directory(the_repository);
argv = get_store(argv + 1, &refs);

View File

@@ -56,7 +56,7 @@ int cmd__revision_walking(int argc, const char **argv)
if (argc < 2)
return 1;
setup_git_directory();
setup_git_directory(the_repository);
if (!strcmp(argv[1], "run-twice")) {
printf("1st\n");

View File

@@ -12,7 +12,7 @@ int cmd__scrap_cache_tree(int ac UNUSED, const char **av UNUSED)
{
struct lock_file index_lock = LOCK_INIT;
setup_git_directory();
setup_git_directory(the_repository);
repo_hold_locked_index(the_repository, &index_lock, LOCK_DIE_ON_ERROR);
if (repo_read_index(the_repository) < 0)
die("unable to read index file");

View File

@@ -23,7 +23,7 @@ int cmd__serve_v2(int argc, const char **argv)
N_("exit immediately after advertising capabilities")),
OPT_END()
};
const char *prefix = setup_git_directory();
const char *prefix = setup_git_directory(the_repository);
/* ignore all unknown cmdline switches for now */
argc = parse_options(argc, argv, prefix, options, serve_usage,

View File

@@ -34,7 +34,7 @@ int cmd__submodule_config(int argc, const char **argv)
if (my_argc % 2 != 0)
die_usage(argc, argv, "Wrong number of arguments.");
setup_git_directory();
setup_git_directory(the_repository);
while (*arg) {
struct object_id commit_oid;

View File

@@ -19,7 +19,7 @@ int cmd__submodule_nested_repo_config(int argc, const char **argv)
if (argc < 3)
die_usage(argv, "Wrong number of arguments.");
setup_git_directory();
setup_git_directory(the_repository);
if (repo_submodule_init(&subrepo, the_repository, argv[1], null_oid(the_hash_algo))) {
die_usage(argv, "Submodule not found.");

View File

@@ -99,7 +99,7 @@ static int cmd__submodule_is_active(int argc, const char **argv)
if (argc != 1)
usage_with_options(submodule_is_active_usage, options);
setup_git_directory();
setup_git_directory(the_repository);
return !is_submodule_active(the_repository, argv[0]);
}
@@ -142,7 +142,7 @@ static int cmd__submodule_config_list(int argc, const char **argv)
argc = parse_options(argc, argv, "test-tools", options, usage,
PARSE_OPT_KEEP_ARGV0);
setup_git_directory();
setup_git_directory(the_repository);
if (argc == 2)
return print_config_from_gitmodules(the_repository, argv[1]);
@@ -161,7 +161,7 @@ static int cmd__submodule_config_set(int argc, const char **argv)
argc = parse_options(argc, argv, "test-tools", options, usage,
PARSE_OPT_KEEP_ARGV0);
setup_git_directory();
setup_git_directory(the_repository);
/* Equivalent to ACTION_SET in builtin/config.c */
if (argc == 3) {
@@ -183,7 +183,7 @@ static int cmd__submodule_config_unset(int argc, const char **argv)
NULL
};
setup_git_directory();
setup_git_directory(the_repository);
if (argc == 2) {
if (!is_writing_gitmodules_ok())
@@ -202,7 +202,7 @@ static int cmd__submodule_config_writeable(int argc, const char **argv UNUSED)
"test-tool submodule config-writeable",
NULL
};
setup_git_directory();
setup_git_directory(the_repository);
if (argc == 1)
return is_writing_gitmodules_ok() ? 0 : -1;

View File

@@ -40,7 +40,7 @@ int cmd__userdiff(int argc, const char **argv)
return error("unknown argument %s", argv[1]);
if (want & USERDIFF_DRIVER_TYPE_CUSTOM) {
setup_git_directory();
setup_git_directory(the_repository);
repo_config(the_repository, cmd__userdiff_config, NULL);
}

View File

@@ -12,7 +12,7 @@ int cmd__write_cache(int argc, const char **argv)
int i, cnt = 1;
if (argc == 2)
cnt = strtol(argv[1], NULL, 0);
setup_git_directory();
setup_git_directory(the_repository);
repo_read_index(the_repository);
for (i = 0; i < cnt; i++) {
repo_hold_locked_index(the_repository, &index_lock,