From 19fa8cd48c106ded717eeaf145b45e995318f3fe Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Thu, 18 Apr 2024 14:14:29 +0200 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- repository.c | 25 ++++++------------------- repository.h | 3 --- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/repository.c b/repository.c index d64d15d952..089edbffa2 100644 --- a/repository.c +++ b/repository.c @@ -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 "abspath.h" #include "repository.h" @@ -23,22 +18,20 @@ /* The main repository */ static struct repository the_repo; struct repository *the_repository; -struct index_state the_index; -static void initialize_repository(struct repository *repo, - struct index_state *index) +static void initialize_repository(struct repository *repo) { - repo->index = index; repo->objects = raw_object_store_new(); repo->remote_state = remote_state_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) { the_repository = &the_repo; - initialize_repository(the_repository, &the_index); + initialize_repository(the_repository); 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; memset(repo, 0, sizeof(*repo)); - if (repo == the_repository) { - initialize_repository(the_repository, &the_index); - } else { - ALLOC_ARRAY(repo->index, 1); - initialize_repository(repo, repo->index); - } + initialize_repository(repo); if (repo_init_gitdir(repo, gitdir)) goto error; @@ -313,8 +301,7 @@ void repo_clear(struct repository *repo) if (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) { diff --git a/repository.h b/repository.h index 268436779c..6f4af15417 100644 --- a/repository.h +++ b/repository.h @@ -187,9 +187,6 @@ struct 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