summaryrefslogtreecommitdiff
path: root/object-store.h
diff options
context:
space:
mode:
authorStefan Beller <sbeller@google.com>2018-03-23 17:20:59 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-03-26 17:05:46 (GMT)
commita80d72db2a73174b3f22142eb2014b33696fd795 (patch)
tree1278f03e0783b80ab18a3cb5b680c4af3e1ef974 /object-store.h
parent97501e933a6d4d5a8567dbbb44fa3b4bff2ea298 (diff)
downloadgit-a80d72db2a73174b3f22142eb2014b33696fd795.zip
git-a80d72db2a73174b3f22142eb2014b33696fd795.tar.gz
git-a80d72db2a73174b3f22142eb2014b33696fd795.tar.bz2
object-store: move packed_git and packed_git_mru to object store
In a process with multiple repositories open, packfile accessors should be associated to a single repository and not shared globally. Move packed_git and packed_git_mru into the_repository and adjust callers to reflect this. [nd: while at there, wrap access to these two fields in get_packed_git() and get_packed_git_mru(). This allows us to lazily initialize these fields without caller doing that explicitly] Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'object-store.h')
-rw-r--r--object-store.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/object-store.h b/object-store.h
index 0b4db58..c687ab7 100644
--- a/object-store.h
+++ b/object-store.h
@@ -52,6 +52,30 @@ void add_to_alternates_memory(const char *dir);
*/
struct strbuf *alt_scratch_buf(struct alternate_object_database *alt);
+struct packed_git {
+ struct packed_git *next;
+ struct list_head mru;
+ struct pack_window *windows;
+ off_t pack_size;
+ const void *index_data;
+ size_t index_size;
+ uint32_t num_objects;
+ uint32_t num_bad_objects;
+ unsigned char *bad_object_sha1;
+ int index_version;
+ time_t mtime;
+ int pack_fd;
+ unsigned pack_local:1,
+ pack_keep:1,
+ freshened:1,
+ do_not_close:1,
+ pack_promisor:1;
+ unsigned char sha1[20];
+ struct revindex_entry *revindex;
+ /* something like ".git/objects/pack/xxxxx.pack" */
+ char pack_name[FLEX_ARRAY]; /* more */
+};
+
struct raw_object_store {
/*
* Path to the repository's object store.
@@ -64,6 +88,16 @@ struct raw_object_store {
struct alternate_object_database *alt_odb_list;
struct alternate_object_database **alt_odb_tail;
+
+ /*
+ * private data
+ *
+ * should only be accessed directly by packfile.c
+ */
+
+ struct packed_git *packed_git;
+ /* A most-recently-used ordered version of the packed_git list. */
+ struct list_head packed_git_mru;
};
struct raw_object_store *raw_object_store_new(void);