Signed-off-by: Brandon Williams <bmwill@xxxxxxxxxx> --- repository.c | 16 ++++++++++++++++ repository.h | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/repository.c b/repository.c index fd53d6bf7..21719d0a6 100644 --- a/repository.c +++ b/repository.c @@ -186,5 +186,21 @@ void repo_clear(struct repository *repo) repo->config = NULL; } + if (repo->index) { + discard_index(repo->index); + free(repo->index); + repo->index = NULL; + } + memset(repo, 0, sizeof(*repo)); } + +int repo_read_index(struct repository *repo) +{ + if (!repo->index) + repo->index = xcalloc(1, sizeof(struct index_state)); + else + discard_index(repo->index); + + return read_index_from(repo->index, repo->index_file); +} diff --git a/repository.h b/repository.h index 2b757df25..9515cc631 100644 --- a/repository.h +++ b/repository.h @@ -2,6 +2,7 @@ #define REPOSITORY_H struct config_set; +struct index_state; struct repository { /* Environment */ @@ -20,6 +21,7 @@ struct repository { * ~/.gitconfig, XDG config file and the global /etc/gitconfig) */ struct config_set *config; + struct index_state *index; /* Configurations */ unsigned ignore_env:1; @@ -35,4 +37,6 @@ extern char *repo_worktree_path(struct repository *repo, const char *path); extern int repo_init(struct repository *repo, const char *path); extern void repo_clear(struct repository *repo); +extern int repo_read_index(struct repository *repo); + #endif /* REPOSITORY_H */ -- 2.13.1.508.gb3defc5cc-goog