repository: add index_state to struct repo
authorBrandon Williams <bmwill@google.com>
Thu, 22 Jun 2017 18:43:43 +0000 (11:43 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 24 Jun 2017 01:24:34 +0000 (18:24 -0700)
Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
repository.c
repository.h

index 686a964..6f6f4d9 100644 (file)
@@ -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);
 }
index 8ae5e86..3a41568 100644 (file)
@@ -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 */