Signed-off-by: Brandon Williams <[email protected]>
---
 repo.c | 19 +++++++++++++++++++
 repo.h |  2 ++
 2 files changed, 21 insertions(+)

diff --git a/repo.c b/repo.c
index d47e98d95..7e5c03ac5 100644
--- a/repo.c
+++ b/repo.c
@@ -2,6 +2,20 @@
 #include "repo.h"
 
 int
+repo_read_index(struct repo *repo, const char *index_file)
+{
+       char *index_path = xstrfmt("%s/index", repo->gitdir);
+       const char *file = index_file ? index_file : index_path;
+
+       repo->index = xcalloc(1, sizeof(struct index_state));
+       if (read_index_from(repo->index, file) < 0)
+               die("failure reading index\n");
+
+       free(index_path);
+       return 0;
+}
+
+int
 repo_init(struct repo *repo, const char *gitdir, const char *worktree)
 {
        int error = 0;
@@ -39,4 +53,9 @@ repo_clear(struct repo *repo)
        repo->gitdir = NULL;
        free(repo->worktree);
        repo->worktree = NULL;
+
+       if (repo->index) {
+               discard_index(repo->index);
+               free(repo->index);
+       }
 }
diff --git a/repo.h b/repo.h
index 55f2dbec6..15a0bdee9 100644
--- a/repo.h
+++ b/repo.h
@@ -7,8 +7,10 @@ struct repo {
        char *gitdir;
        char *worktree;
        const char *submodule_prefix;
+       struct index_state *index;
 };
 
+extern int repo_read_index(struct repo *repo, const char *index_file);
 extern int repo_init(struct repo *repo, const char *gitdir, const char 
*worktree);
 extern void repo_clear(struct repo *repo);
 
-- 
2.13.0.303.g4ebf302169-goog

Reply via email to