]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: pass storage format to `ref_store_init()` explicitly
authorPatrick Steinhardt <ps@pks.im>
Thu, 6 Jun 2024 05:29:06 +0000 (07:29 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 6 Jun 2024 16:04:31 +0000 (09:04 -0700)
We're about to introduce logic to migrate refs from one storage format
to another one. This will require us to initialize a ref store with a
different format than the one used by the passed-in repository.

Prepare for this by accepting the desired ref storage format as
parameter.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c

diff --git a/refs.c b/refs.c
index e6db85a165941a948ff9430386dec3a90b5243de..423684b8b86c0ea99826e101c1ef4de48b5d72d8 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1891,16 +1891,17 @@ static struct ref_store *lookup_ref_store_map(struct strmap *map,
 
 /*
  * Create, record, and return a ref_store instance for the specified
- * gitdir.
+ * gitdir using the given ref storage format.
  */
 static struct ref_store *ref_store_init(struct repository *repo,
+                                       enum ref_storage_format format,
                                        const char *gitdir,
                                        unsigned int flags)
 {
        const struct ref_storage_be *be;
        struct ref_store *refs;
 
-       be = find_ref_storage_backend(repo->ref_storage_format);
+       be = find_ref_storage_backend(format);
        if (!be)
                BUG("reference backend is unknown");
 
@@ -1922,7 +1923,8 @@ 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->gitdir, REF_STORE_ALL_CAPS);
+       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);
        return r->refs_private;
 }
@@ -1982,7 +1984,8 @@ struct ref_store *repo_get_submodule_ref_store(struct repository *repo,
                free(subrepo);
                goto done;
        }
-       refs = ref_store_init(subrepo, submodule_sb.buf,
+       refs = ref_store_init(subrepo, the_repository->ref_storage_format,
+                             submodule_sb.buf,
                              REF_STORE_READ | REF_STORE_ODB);
        register_ref_store_map(&repo->submodule_ref_stores, "submodule",
                               refs, submodule);
@@ -2011,12 +2014,12 @@ struct ref_store *get_worktree_ref_store(const struct worktree *wt)
                struct strbuf common_path = STRBUF_INIT;
                strbuf_git_common_path(&common_path, wt->repo,
                                      "worktrees/%s", wt->id);
-               refs = ref_store_init(wt->repo, common_path.buf,
-                                     REF_STORE_ALL_CAPS);
+               refs = ref_store_init(wt->repo, wt->repo->ref_storage_format,
+                                     common_path.buf, REF_STORE_ALL_CAPS);
                strbuf_release(&common_path);
        } else {
-               refs = ref_store_init(wt->repo, wt->repo->commondir,
-                                     REF_STORE_ALL_CAPS);
+               refs = ref_store_init(wt->repo, the_repository->ref_storage_format,
+                                     wt->repo->commondir, REF_STORE_ALL_CAPS);
        }
 
        if (refs)