repository: add repo reference to index_state

It will be helpful to add behavior to index operations that might
trigger an object lookup. Since each index belongs to a specific
repository, add a 'repo' pointer to struct index_state that allows
access to this repository.

Add a BUG() statement if the repo already has an index, and the index
already has a repo, but somehow the index points to a different repo.

This will prevent future changes from needing to pass an additional
'struct repository *repo' parameter and instead rely only on the 'struct
index_state *istate' parameter.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee 2021-01-23 19:58:15 +00:00 коммит произвёл Junio C Hamano
Родитель cae70acf24
Коммит 1fd9ae517c
2 изменённых файлов: 7 добавлений и 0 удалений

Просмотреть файл

@ -328,6 +328,7 @@ struct index_state {
struct ewah_bitmap *fsmonitor_dirty; struct ewah_bitmap *fsmonitor_dirty;
struct mem_pool *ce_mem_pool; struct mem_pool *ce_mem_pool;
struct progress *progress; struct progress *progress;
struct repository *repo;
}; };
/* Name hashing */ /* Name hashing */

Просмотреть файл

@ -264,6 +264,12 @@ int repo_read_index(struct repository *repo)
if (!repo->index) if (!repo->index)
repo->index = xcalloc(1, sizeof(*repo->index)); repo->index = xcalloc(1, sizeof(*repo->index));
/* Complete the double-reference */
if (!repo->index->repo)
repo->index->repo = repo;
else if (repo->index->repo != repo)
BUG("repo's index should point back at itself");
return read_index_from(repo->index, repo->index_file, repo->gitdir); return read_index_from(repo->index, repo->index_file, repo->gitdir);
} }