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
parent
9ee6d63bab
commit
19fa8cd48c
23
repository.c
23
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 "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,7 +301,6 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue