*/
void read_loose_refs(const char *dirname, struct ref_dir *dir)
{
- struct files_ref_store *refs = dir->ref_store;
+ struct files_ref_store *refs = dir->cache->ref_store;
DIR *d;
struct dirent *de;
int dirnamelen = strlen(dirname);
} else if (S_ISDIR(st.st_mode)) {
strbuf_addch(&refname, '/');
add_entry_to_dir(dir,
- create_dir_entry(refs, refname.buf,
+ create_dir_entry(dir->cache, refname.buf,
refname.len, 1));
} else {
if (!refs_resolve_ref_unsafe(&refs->base,
* lazily):
*/
add_entry_to_dir(get_ref_dir(refs->loose->root),
- create_dir_entry(refs, "refs/", 5, 1));
+ create_dir_entry(refs->loose, "refs/", 5, 1));
}
return get_ref_dir(refs->loose->root);
}
int pos = search_ref_dir(dir, "refs/bisect/", 12);
if (pos < 0) {
struct ref_entry *child_entry;
- child_entry = create_dir_entry(dir->ref_store,
+ child_entry = create_dir_entry(dir->cache,
"refs/bisect/",
12, 1);
add_entry_to_dir(dir, child_entry);
{
struct ref_cache *ret = xcalloc(1, sizeof(*ret));
- ret->root = create_dir_entry(refs, "", 0, 1);
+ ret->ref_store = refs;
+ ret->root = create_dir_entry(ret, "", 0, 1);
return ret;
}
dir->entries = NULL;
}
-struct ref_entry *create_dir_entry(struct files_ref_store *ref_store,
+struct ref_entry *create_dir_entry(struct ref_cache *cache,
const char *dirname, size_t len,
int incomplete)
{
struct ref_entry *direntry;
+
FLEX_ALLOC_MEM(direntry, name, dirname, len);
- direntry->u.subdir.ref_store = ref_store;
+ direntry->u.subdir.cache = cache;
direntry->flag = REF_DIR | (incomplete ? REF_INCOMPLETE : 0);
return direntry;
}
* therefore, create an empty record for it but mark
* the record complete.
*/
- entry = create_dir_entry(dir->ref_store, subdirname, len, 0);
+ entry = create_dir_entry(dir->cache, subdirname, len, 0);
add_entry_to_dir(dir, entry);
} else {
entry = dir->entries[entry_index];
struct ref_cache {
struct ref_entry *root;
+
+ /* A pointer to the files_ref_store whose cache this is: */
+ struct files_ref_store *ref_store;
};
/*
*/
int sorted;
- /* A pointer to the files_ref_store that contains this ref_dir. */
- struct files_ref_store *ref_store;
+ /* The ref_cache containing this entry: */
+ struct ref_cache *cache;
struct ref_entry **entries;
};
* dirname is the name of the directory with a trailing slash (e.g.,
* "refs/heads/") or "" for the top-level directory.
*/
-struct ref_entry *create_dir_entry(struct files_ref_store *ref_store,
+struct ref_entry *create_dir_entry(struct ref_cache *cache,
const char *dirname, size_t len,
int incomplete);