Signed-off-by: Brandon Williams <bmwill@xxxxxxxxxx> --- repository.c | 16 ++++++++++++++++ repository.h | 9 +++++++++ 2 files changed, 25 insertions(+) diff --git a/repository.c b/repository.c index 686a964ad..6f6f4d91e 100644 --- a/repository.c +++ b/repository.c @@ -163,4 +163,20 @@ void repo_clear(struct repository *repo) free(repo->config); repo->config = NULL; } + + if (repo->index) { + discard_index(repo->index); + free(repo->index); + repo->index = NULL; + } +} + +int repo_read_index(struct repository *repo) +{ + if (!repo->index) + repo->index = xcalloc(1, sizeof(*repo->index)); + else + discard_index(repo->index); + + return read_index_from(repo->index, repo->index_file); } diff --git a/repository.h b/repository.h index 8ae5e8653..3a41568aa 100644 --- a/repository.h +++ b/repository.h @@ -2,6 +2,7 @@ #define REPOSITORY_H struct config_set; +struct index_state; struct repository { /* Environment */ @@ -49,6 +50,12 @@ struct repository { */ struct config_set *config; + /* + * Repository's in-memory index. + * 'repo_read_index()' can be used to populate 'index'. + */ + struct index_state *index; + /* Configurations */ /* * Bit used during initialization to indicate if repository state (like @@ -71,4 +78,6 @@ extern void repo_set_worktree(struct repository *repo, const char *path); extern int repo_init(struct repository *repo, const char *gitdir, const char *worktree); extern void repo_clear(struct repository *repo); +extern int repo_read_index(struct repository *repo); + #endif /* REPOSITORY_H */ -- 2.13.1.704.gde00cce3c-goog