diff options
author | Michael Haggerty <mhagger@alum.mit.edu> | 2017-06-23 09:01:21 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-06-23 13:27:32 -0700 |
commit | bdf55fa6b23b14ac8726fc29182739762b8f6011 (patch) | |
tree | a1a59ffdd5b2b151230a5bf80c87b9aaf8300525 /refs | |
parent | 2f108821666a968940f171d52d4d0745a3002b35 (diff) | |
download | git-bdf55fa6b23b14ac8726fc29182739762b8f6011.tar.gz git-bdf55fa6b23b14ac8726fc29182739762b8f6011.tar.xz |
packed_ref_store: new struct
Start extracting the packed-refs-related data structures into a new
class, `packed_ref_store`. It doesn't yet implement `ref_store`, but
it will.
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs')
-rw-r--r-- | refs/files-backend.c | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c index 87cecde23..2efb71cee 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -48,6 +48,28 @@ struct packed_ref_cache { }; /* + * A container for `packed-refs`-related data. It is not (yet) a + * `ref_store`. + */ +struct packed_ref_store { + unsigned int store_flags; + + /* + * A cache of the values read from the `packed-refs` file, if + * it might still be current; otherwise, NULL. + */ + struct packed_ref_cache *cache; +}; + +static struct packed_ref_store *packed_ref_store_create(unsigned int store_flags) +{ + struct packed_ref_store *refs = xcalloc(1, sizeof(*refs)); + + refs->store_flags = store_flags; + return refs; +} + +/* * Future: need to be in "struct repository" * when doing a full libification. */ @@ -60,13 +82,14 @@ struct files_ref_store { char *packed_refs_path; struct ref_cache *loose; - struct packed_ref_cache *packed; /* * Lock used for the "packed-refs" file. Note that this (and * thus the enclosing `files_ref_store`) must not be freed. */ struct lock_file packed_refs_lock; + + struct packed_ref_store *packed_ref_store; }; /* @@ -95,12 +118,12 @@ static int release_packed_ref_cache(struct packed_ref_cache *packed_refs) static void clear_packed_ref_cache(struct files_ref_store *refs) { - if (refs->packed) { - struct packed_ref_cache *packed_refs = refs->packed; + if (refs->packed_ref_store->cache) { + struct packed_ref_cache *packed_refs = refs->packed_ref_store->cache; if (is_lock_file_locked(&refs->packed_refs_lock)) die("BUG: packed-ref cache cleared while locked"); - refs->packed = NULL; + refs->packed_ref_store->cache = NULL; release_packed_ref_cache(packed_refs); } } @@ -132,6 +155,7 @@ static struct ref_store *files_ref_store_create(const char *gitdir, refs->gitcommondir = strbuf_detach(&sb, NULL); strbuf_addf(&sb, "%s/packed-refs", refs->gitcommondir); refs->packed_refs_path = strbuf_detach(&sb, NULL); + refs->packed_ref_store = packed_ref_store_create(flags); return ref_store; } @@ -375,8 +399,8 @@ static void files_ref_path(struct files_ref_store *refs, */ static void validate_packed_ref_cache(struct files_ref_store *refs) { - if (refs->packed && - !stat_validity_check(&refs->packed->validity, + if (refs->packed_ref_store->cache && + !stat_validity_check(&refs->packed_ref_store->cache->validity, files_packed_refs_path(refs))) clear_packed_ref_cache(refs); } @@ -396,10 +420,10 @@ static struct packed_ref_cache *get_packed_ref_cache(struct files_ref_store *ref if (!is_lock_file_locked(&refs->packed_refs_lock)) validate_packed_ref_cache(refs); - if (!refs->packed) - refs->packed = read_packed_refs(packed_refs_file); + if (!refs->packed_ref_store->cache) + refs->packed_ref_store->cache = read_packed_refs(packed_refs_file); - return refs->packed; + return refs->packed_ref_store->cache; } static struct ref_dir *get_packed_ref_dir(struct packed_ref_cache *packed_ref_cache) |