Message ID | a0d89d7a9731adeee4e2a432843b2f4a9c232dc4.1611320639.git.gitgitgadget@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | More index cleanups | expand |
"Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes: > From: Derrick Stolee <dstolee@microsoft.com> > > 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. > > 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> > --- I think this makes sense, but shouldn't we insist on these bidirectional links to point at each other? Otherwise we cannot simplify the function signatures safely later. That is ... > + /* Complete the double-reference */ > + if (!repo->index->repo) > + repo->index->repo = repo; > + else if (repo->index->repo != repo) BUG("the repo->index instance does not belong to the repo???"); ... a check like this? > return read_index_from(repo->index, repo->index_file, repo->gitdir); > }
diff --git a/cache.h b/cache.h index 71097657489..f9c7a603841 100644 --- a/cache.h +++ b/cache.h @@ -328,6 +328,7 @@ struct index_state { struct ewah_bitmap *fsmonitor_dirty; struct mem_pool *ce_mem_pool; struct progress *progress; + struct repository *repo; }; /* Name hashing */ diff --git a/repository.c b/repository.c index a4174ddb062..67a4c1da2d9 100644 --- a/repository.c +++ b/repository.c @@ -264,6 +264,10 @@ int repo_read_index(struct repository *repo) if (!repo->index) repo->index = xcalloc(1, sizeof(*repo->index)); + /* Complete the double-reference */ + if (!repo->index->repo) + repo->index->repo = repo; + return read_index_from(repo->index, repo->index_file, repo->gitdir); }