repository: drop `the_index` variable

All users of `the_index` have been converted to use either a custom
`struct index_state *` or the index provided by `the_repository`. We can
thus drop the globally-accessible declaration of this variable. In fact,
we can go further than that and drop `the_index` completely now and have
it be allocated dynamically in `initialize_repository()` as all the
other data structures in it are.

This concludes the quest to make Git `the_index` free, which has started
with 4aab5b46f4 (Make read-cache.c "the_index" free., 2007-04-01).

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Patrick Steinhardt 2024-04-18 14:14:29 +02:00 committed by Junio C Hamano
parent 9ee6d63bab
commit 19fa8cd48c
2 changed files with 6 additions and 22 deletions

View File

@ -1,8 +1,3 @@
/*
* not really _using_ the compat macros, just make sure the_index
* declaration matches the definition in this file.
*/
#define USE_THE_INDEX_VARIABLE
#include "git-compat-util.h" #include "git-compat-util.h"
#include "abspath.h" #include "abspath.h"
#include "repository.h" #include "repository.h"
@ -23,22 +18,20 @@
/* The main repository */ /* The main repository */
static struct repository the_repo; static struct repository the_repo;
struct repository *the_repository; struct repository *the_repository;
struct index_state the_index;


static void initialize_repository(struct repository *repo, static void initialize_repository(struct repository *repo)
struct index_state *index)
{ {
repo->index = index;
repo->objects = raw_object_store_new(); repo->objects = raw_object_store_new();
repo->remote_state = remote_state_new(); repo->remote_state = remote_state_new();
repo->parsed_objects = parsed_object_pool_new(); repo->parsed_objects = parsed_object_pool_new();
index_state_init(index, repo); ALLOC_ARRAY(repo->index, 1);
index_state_init(repo->index, repo);
} }


void initialize_the_repository(void) void initialize_the_repository(void)
{ {
the_repository = &the_repo; the_repository = &the_repo;
initialize_repository(the_repository, &the_index); initialize_repository(the_repository);
repo_set_hash_algo(&the_repo, GIT_HASH_SHA1); repo_set_hash_algo(&the_repo, GIT_HASH_SHA1);
} }


@ -191,12 +184,7 @@ int repo_init(struct repository *repo,
struct repository_format format = REPOSITORY_FORMAT_INIT; struct repository_format format = REPOSITORY_FORMAT_INIT;
memset(repo, 0, sizeof(*repo)); memset(repo, 0, sizeof(*repo));


if (repo == the_repository) { initialize_repository(repo);
initialize_repository(the_repository, &the_index);
} else {
ALLOC_ARRAY(repo->index, 1);
initialize_repository(repo, repo->index);
}


if (repo_init_gitdir(repo, gitdir)) if (repo_init_gitdir(repo, gitdir))
goto error; goto error;
@ -313,8 +301,7 @@ void repo_clear(struct repository *repo)


if (repo->index) { if (repo->index) {
discard_index(repo->index); discard_index(repo->index);
if (repo->index != &the_index) FREE_AND_NULL(repo->index);
FREE_AND_NULL(repo->index);
} }


if (repo->promisor_remote_config) { if (repo->promisor_remote_config) {

View File

@ -187,9 +187,6 @@ struct repository {
}; };


extern struct repository *the_repository; extern struct repository *the_repository;
#ifdef USE_THE_INDEX_VARIABLE
extern struct index_state the_index;
#endif


/* /*
* Define a custom repository layout. Any field can be NULL, which * Define a custom repository layout. Any field can be NULL, which