refs: pass storage format to `ref_store_init()` explicitly

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>

Patrick Steinhardt committed Jun 6, 2024 at 07:29 UTC 6e1683ace981b094d9adbd08de406bf59d39b549
1 file changed +11 -8
refs.c
+11 -8
@@ -1891,16 +1891,17 @@ static struct ref_store *lookup_ref_store_map(struct strmap *map,
1891
1892 /*
1893 * Create, record, and return a ref_store instance for the specified
1894 - * gitdir.
1894 + * gitdir using the given ref storage format.
1895 */
1896 static struct ref_store *ref_store_init(struct repository *repo,
1897 + enum ref_storage_format format,
1898 const char *gitdir,
1899 unsigned int flags)
1900 {
1901 const struct ref_storage_be *be;
1902 struct ref_store *refs;
1903
1903 - be = find_ref_storage_backend(repo->ref_storage_format);
1904 + be = find_ref_storage_backend(format);
1905 if (!be)
1906 BUG("reference backend is unknown");
1907
@@ -1922,7 +1923,8 @@ struct ref_store *get_main_ref_store(struct repository *r)
1923 if (!r->gitdir)
1924 BUG("attempting to get main_ref_store outside of repository");
1925
1925 - r->refs_private = ref_store_init(r, r->gitdir, REF_STORE_ALL_CAPS);
1926 + r->refs_private = ref_store_init(r, r->ref_storage_format,
1927 + r->gitdir, REF_STORE_ALL_CAPS);
1928 r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private);
1929 return r->refs_private;
1930 }
@@ -1982,7 +1984,8 @@ struct ref_store *repo_get_submodule_ref_store(struct repository *repo,
1984 free(subrepo);
1985 goto done;
1986 }
1985 - refs = ref_store_init(subrepo, submodule_sb.buf,
1987 + refs = ref_store_init(subrepo, the_repository->ref_storage_format,
1988 + submodule_sb.buf,
1989 REF_STORE_READ | REF_STORE_ODB);
1990 register_ref_store_map(&repo->submodule_ref_stores, "submodule",
1991 refs, submodule);
@@ -2011,12 +2014,12 @@ struct ref_store *get_worktree_ref_store(const struct worktree *wt)
2014 struct strbuf common_path = STRBUF_INIT;
2015 strbuf_git_common_path(&common_path, wt->repo,
2016 "worktrees/%s", wt->id);
2014 - refs = ref_store_init(wt->repo, common_path.buf,
2015 - REF_STORE_ALL_CAPS);
2017 + refs = ref_store_init(wt->repo, wt->repo->ref_storage_format,
2018 + common_path.buf, REF_STORE_ALL_CAPS);
2019 strbuf_release(&common_path);
2020 } else {
2018 - refs = ref_store_init(wt->repo, wt->repo->commondir,
2019 - REF_STORE_ALL_CAPS);
2021 + refs = ref_store_init(wt->repo, the_repository->ref_storage_format,
2022 + wt->repo->commondir, REF_STORE_ALL_CAPS);
2023 }
2024
2025 if (refs)