repository: drop initialize_the_repository()

Now that we have dropped `the_index`, `initialize_the_repository()`
doesn't really do a lot anymore except for setting up the pointer for
`the_repository` and then calling `initialize_repository()`. The former
can be replaced by statically initializing the pointer though, which
basically makes this function moot.

Convert callers to instead call `initialize_repository(the_repository)`
and drop `initialize_thee_repository()`.

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-04-18 14:14:33 +02:00 committed by Junio C Hamano
parent 19fa8cd48c
commit 0c47355790
5 changed files with 26 additions and 12 deletions

View file

@ -48,7 +48,7 @@ int main(int argc, const char **argv)
setlocale(LC_CTYPE, "");
git_setup_gettext();
initialize_the_repository();
initialize_repository(the_repository);
attr_start();

View file

@ -11,7 +11,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
struct commit_graph *g;
initialize_the_repository();
initialize_repository(the_repository);
/*
* Initialize the_repository with commit-graph settings that would
* normally be read from the repository's gitdir. We want to avoid

View file

@ -17,22 +17,35 @@
/* The main repository */
static struct repository the_repo;
struct repository *the_repository;
struct repository *the_repository = &the_repo;
static void initialize_repository(struct repository *repo)
void initialize_repository(struct repository *repo)
{
repo->objects = raw_object_store_new();
repo->remote_state = remote_state_new();
repo->parsed_objects = parsed_object_pool_new();
ALLOC_ARRAY(repo->index, 1);
index_state_init(repo->index, repo);
}
void initialize_the_repository(void)
{
the_repository = &the_repo;
initialize_repository(the_repository);
repo_set_hash_algo(&the_repo, GIT_HASH_SHA1);
/*
* Unfortunately, we need to keep this hack around for the time being:
*
* - Not setting up the hash algorithm for `the_repository` leads to
* crashes because `the_hash_algo` is a macro that expands to
* `the_repository->hash_algo`. So if Git commands try to access
* `the_hash_algo` without a Git directory we crash.
*
* - Setting up the hash algorithm to be SHA1 by default breaks other
* commands when running with SHA256.
*
* This is another point in case why having global state is a bad idea.
* Eventually, we should remove this hack and stop setting the hash
* algorithm in this function altogether. Instead, it should only ever
* be set via our repository setup procedures. But that requires more
* work.
*/
if (repo == the_repository)
repo_set_hash_algo(repo, GIT_HASH_SHA1);
}
static void expand_base_dir(char **out, const char *in,

View file

@ -207,7 +207,7 @@ void repo_set_worktree(struct repository *repo, const char *path);
void repo_set_hash_algo(struct repository *repo, int algo);
void repo_set_compat_hash_algo(struct repository *repo, int compat_algo);
void repo_set_ref_storage_format(struct repository *repo, unsigned int format);
void initialize_the_repository(void);
void initialize_repository(struct repository *repo);
RESULT_MUST_BE_USED
int repo_init(struct repository *r, const char *gitdir, const char *worktree);

View file

@ -9,7 +9,7 @@ int cmd__read_cache(int argc, const char **argv)
int i, cnt = 1;
const char *name = NULL;
initialize_the_repository();
initialize_repository(the_repository);
if (argc > 1 && skip_prefix(argv[1], "--print-and-refresh=", &name)) {
argc--;