summaryrefslogtreecommitdiff
path: root/refs/ref-cache.c
diff options
context:
space:
mode:
authorLibravatar Michael Haggerty <mhagger@alum.mit.edu>2017-04-16 08:41:32 +0200
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-04-16 21:32:46 -0700
commit7c22bc8a18744cbd79436a8ce598a0dd5d49869b (patch)
tree3daf30ca84cfb8009d6964fd4708480e22eb510d /refs/ref-cache.c
parentrefs: split `ref_cache` code into separate files (diff)
downloadtgif-7c22bc8a18744cbd79436a8ce598a0dd5d49869b.tar.xz
ref-cache: introduce a new type, ref_cache
For now, it just wraps a `ref_entry *` that points at the root of the tree. Soon it will hold more information. Add two new functions, `create_ref_cache()` and `free_ref_cache()`. Make `free_ref_entry()` private. Change files-backend to use this type to hold its caches. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs/ref-cache.c')
-rw-r--r--refs/ref-cache.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/refs/ref-cache.c b/refs/ref-cache.c
index 4274a43a9b..bf911028c8 100644
--- a/refs/ref-cache.c
+++ b/refs/ref-cache.c
@@ -63,9 +63,17 @@ struct ref_entry *create_ref_entry(const char *refname,
return ref;
}
+struct ref_cache *create_ref_cache(struct files_ref_store *refs)
+{
+ struct ref_cache *ret = xcalloc(1, sizeof(*ret));
+
+ ret->root = create_dir_entry(refs, "", 0, 1);
+ return ret;
+}
+
static void clear_ref_dir(struct ref_dir *dir);
-void free_ref_entry(struct ref_entry *entry)
+static void free_ref_entry(struct ref_entry *entry)
{
if (entry->flag & REF_DIR) {
/*
@@ -77,6 +85,12 @@ void free_ref_entry(struct ref_entry *entry)
free(entry);
}
+void free_ref_cache(struct ref_cache *cache)
+{
+ free_ref_entry(cache->root);
+ free(cache);
+}
+
/*
* Clear and free all entries in dir, recursively.
*/