refs: support obtaining ref_store for given dir

The refs subsystem uses the `get_main_ref_store()` to obtain the main
ref_store for a given repository. In the upcoming patches we also want
to create a ref_store for any given reference directory, which may exist
in arbitrary paths. For the files backend and the reftable backend, the
reference directory is generally the $GIT_DIR.

To support such behavior, extract out the core logic for creating out
the ref_store from `get_main_ref_store()` into a new function
`get_ref_store_for_dir()` which can provide the ref_store for a
given (repository, directory, reference format) combination.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Karthik Nayak 2025-12-01 12:24:58 +01:00 committed by Junio C Hamano
parent 9a2fb147f2
commit cc4dcc855b

13
refs.c
View File

@ -2177,6 +2177,15 @@ void ref_store_release(struct ref_store *ref_store)
free(ref_store->gitdir);
}
static struct ref_store *get_ref_store_for_dir(struct repository *r,
char *dir,
enum ref_storage_format format)
{
struct ref_store *ref_store = ref_store_init(r, format, dir,
REF_STORE_ALL_CAPS);
return maybe_debug_wrap_ref_store(dir, ref_store);
}
struct ref_store *get_main_ref_store(struct repository *r)
{
if (r->refs_private)
@ -2185,9 +2194,7 @@ struct ref_store *get_main_ref_store(struct repository *r)
if (!r->gitdir)
BUG("attempting to get main_ref_store outside of repository");
r->refs_private = ref_store_init(r, r->ref_storage_format,
r->gitdir, REF_STORE_ALL_CAPS);
r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private);
r->refs_private = get_ref_store_for_dir(r, r->gitdir, r->ref_storage_format);
return r->refs_private;
}