summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repository.c16
-rw-r--r--repository.h9
2 files changed, 25 insertions, 0 deletions
diff --git a/repository.c b/repository.c
index 686a964ad6..6f6f4d91ef 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 8ae5e8653a..3a41568aa0 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 */