Signed-off-by: Brandon Williams <bmw...@google.com>
---
 repo.c | 17 +++++++++++++++++
 repo.h |  3 +++
 2 files changed, 20 insertions(+)

diff --git a/repo.c b/repo.c
index c67cad5a2..c79d29534 100644
--- a/repo.c
+++ b/repo.c
@@ -104,6 +104,17 @@ void repo_read_config(struct repo *repo)
        git_config_with_options(config_set_callback, repo->config, NULL, &opts);
 }
 
+void repo_read_index(struct repo *repo)
+{
+       if (!repo->index)
+               repo->index = xcalloc(1, sizeof(struct index_state));
+       else
+               discard_index(repo->index);
+
+       if (read_index_from(repo->index, repo->index_file) < 0)
+               die(_("failure reading index"));
+}
+
 int repo_init(struct repo *repo, const char *gitdir)
 {
        int error = 0;
@@ -149,4 +160,10 @@ void repo_clear(struct repo *repo)
                free(repo->config);
                repo->config = NULL;
        }
+
+       if (repo->index) {
+               discard_index(repo->index);
+               free(repo->index);
+               repo->index = NULL;
+       }
 }
diff --git a/repo.h b/repo.h
index 284452832..756cda9e1 100644
--- a/repo.h
+++ b/repo.h
@@ -2,6 +2,7 @@
 #define REPO_H
 
 struct config_set;
+struct index_state;
 
 struct repo {
        /* Environment */
@@ -20,6 +21,7 @@ struct repo {
         * ~/.gitconfig, XDG config file and the global /etc/gitconfig)
         */
        struct config_set *config;
+       struct index_state *index;
 
        /* Configurations */
        unsigned ignore_env:1;
@@ -32,6 +34,7 @@ extern struct repo the_repository;
 extern void repo_set_gitdir(struct repo *repo, const char *path);
 extern void repo_set_worktree(struct repo *repo, const char *path);
 extern void repo_read_config(struct repo *repo);
+extern void repo_read_index(struct repo *repo);
 extern int repo_init(struct repo *repo, const char *path);
 extern void repo_clear(struct repo *repo);
 
-- 
2.13.0.506.g27d5fe0cd-goog

Reply via email to