refs: add repository argument to get_main_ref_store

Add a repository argument to allow the get_main_ref_store caller to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet. As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Stefan Beller committed Apr 11, 2018 at 17:21 UTC 23a3f0cb16caa1cc79cf0af42a92bff61fe955a4
5 files changed +44 -38
builtin/pack-refs.c
+2 -1
@@ -1,6 +1,7 @@
1 #include "builtin.h"
2 #include "parse-options.h"
3 #include "refs.h"
4 +#include "repository.h"
5
6 static char const * const pack_refs_usage[] = {
7 N_("git pack-refs [<options>]"),
@@ -17,5 +18,5 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix)
18 };
19 if (parse_options(argc, argv, prefix, opts, pack_refs_usage, 0))
20 usage_with_options(pack_refs_usage, opts);
20 - return refs_pack_refs(get_main_ref_store(), flags);
21 + return refs_pack_refs(get_main_ref_store(the_repository), flags);
22 }
refs.c
+34 -33
@@ -13,6 +13,7 @@
13 #include "tag.h"
14 #include "submodule.h"
15 #include "worktree.h"
16 +#include "repository.h"
17
18 /*
19 * List of all available backends
@@ -206,7 +207,7 @@ char *refs_resolve_refdup(struct ref_store *refs,
207 char *resolve_refdup(const char *refname, int resolve_flags,
208 struct object_id *oid, int *flags)
209 {
209 - return refs_resolve_refdup(get_main_ref_store(),
210 + return refs_resolve_refdup(get_main_ref_store(the_repository),
211 refname, resolve_flags,
212 oid, flags);
213 }
@@ -228,7 +229,7 @@ int refs_read_ref_full(struct ref_store *refs, const char *refname,
229
230 int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
231 {
231 - return refs_read_ref_full(get_main_ref_store(), refname,
232 + return refs_read_ref_full(get_main_ref_store(the_repository), refname,
233 resolve_flags, oid, flags);
234 }
235
@@ -375,7 +376,7 @@ int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
376
377 int for_each_tag_ref(each_ref_fn fn, void *cb_data)
378 {
378 - return refs_for_each_tag_ref(get_main_ref_store(), fn, cb_data);
379 + return refs_for_each_tag_ref(get_main_ref_store(the_repository), fn, cb_data);
380 }
381
382 int refs_for_each_branch_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
@@ -385,7 +386,7 @@ int refs_for_each_branch_ref(struct ref_store *refs, each_ref_fn fn, void *cb_da
386
387 int for_each_branch_ref(each_ref_fn fn, void *cb_data)
388 {
388 - return refs_for_each_branch_ref(get_main_ref_store(), fn, cb_data);
389 + return refs_for_each_branch_ref(get_main_ref_store(the_repository), fn, cb_data);
390 }
391
392 int refs_for_each_remote_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
@@ -395,7 +396,7 @@ int refs_for_each_remote_ref(struct ref_store *refs, each_ref_fn fn, void *cb_da
396
397 int for_each_remote_ref(each_ref_fn fn, void *cb_data)
398 {
398 - return refs_for_each_remote_ref(get_main_ref_store(), fn, cb_data);
399 + return refs_for_each_remote_ref(get_main_ref_store(the_repository), fn, cb_data);
400 }
401
402 int head_ref_namespaced(each_ref_fn fn, void *cb_data)
@@ -730,7 +731,7 @@ int refs_delete_ref(struct ref_store *refs, const char *msg,
731 struct strbuf err = STRBUF_INIT;
732
733 if (ref_type(refname) == REF_TYPE_PSEUDOREF) {
733 - assert(refs == get_main_ref_store());
734 + assert(refs == get_main_ref_store(the_repository));
735 return delete_pseudoref(refname, old_oid);
736 }
737
@@ -752,7 +753,7 @@ int refs_delete_ref(struct ref_store *refs, const char *msg,
753 int delete_ref(const char *msg, const char *refname,
754 const struct object_id *old_oid, unsigned int flags)
755 {
755 - return refs_delete_ref(get_main_ref_store(), msg, refname,
756 + return refs_delete_ref(get_main_ref_store(the_repository), msg, refname,
757 old_oid, flags);
758 }
759
@@ -928,7 +929,7 @@ struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
929
930 struct ref_transaction *ref_transaction_begin(struct strbuf *err)
931 {
931 - return ref_store_transaction_begin(get_main_ref_store(), err);
932 + return ref_store_transaction_begin(get_main_ref_store(the_repository), err);
933 }
934
935 void ref_transaction_free(struct ref_transaction *transaction)
@@ -1060,7 +1061,7 @@ int refs_update_ref(struct ref_store *refs, const char *msg,
1061 int ret = 0;
1062
1063 if (ref_type(refname) == REF_TYPE_PSEUDOREF) {
1063 - assert(refs == get_main_ref_store());
1064 + assert(refs == get_main_ref_store(the_repository));
1065 ret = write_pseudoref(refname, new_oid, old_oid, &err);
1066 } else {
1067 t = ref_store_transaction_begin(refs, &err);
@@ -1099,7 +1100,7 @@ int update_ref(const char *msg, const char *refname,
1100 const struct object_id *old_oid,
1101 unsigned int flags, enum action_on_err onerr)
1102 {
1102 - return refs_update_ref(get_main_ref_store(), msg, refname, new_oid,
1103 + return refs_update_ref(get_main_ref_store(the_repository), msg, refname, new_oid,
1104 old_oid, flags, onerr);
1105 }
1106
@@ -1320,7 +1321,7 @@ int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1321
1322 int head_ref(each_ref_fn fn, void *cb_data)
1323 {
1323 - return refs_head_ref(get_main_ref_store(), fn, cb_data);
1324 + return refs_head_ref(get_main_ref_store(the_repository), fn, cb_data);
1325 }
1326
1327 struct ref_iterator *refs_ref_iterator_begin(
@@ -1379,7 +1380,7 @@ int refs_for_each_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1380
1381 int for_each_ref(each_ref_fn fn, void *cb_data)
1382 {
1382 - return refs_for_each_ref(get_main_ref_store(), fn, cb_data);
1383 + return refs_for_each_ref(get_main_ref_store(the_repository), fn, cb_data);
1384 }
1385
1386 int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
@@ -1390,7 +1391,7 @@ int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
1391
1392 int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
1393 {
1393 - return refs_for_each_ref_in(get_main_ref_store(), prefix, fn, cb_data);
1394 + return refs_for_each_ref_in(get_main_ref_store(the_repository), prefix, fn, cb_data);
1395 }
1396
1397 int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data, unsigned int broken)
@@ -1399,7 +1400,7 @@ int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data, unsig
1400
1401 if (broken)
1402 flag = DO_FOR_EACH_INCLUDE_BROKEN;
1402 - return do_for_each_ref(get_main_ref_store(),
1403 + return do_for_each_ref(get_main_ref_store(the_repository),
1404 prefix, fn, 0, flag, cb_data);
1405 }
1406
@@ -1416,7 +1417,7 @@ int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix,
1417
1418 int for_each_replace_ref(each_ref_fn fn, void *cb_data)
1419 {
1419 - return do_for_each_ref(get_main_ref_store(),
1420 + return do_for_each_ref(get_main_ref_store(the_repository),
1421 git_replace_ref_base, fn,
1422 strlen(git_replace_ref_base),
1423 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
@@ -1427,7 +1428,7 @@ int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)
1428 struct strbuf buf = STRBUF_INIT;
1429 int ret;
1430 strbuf_addf(&buf, "%srefs/", get_git_namespace());
1430 - ret = do_for_each_ref(get_main_ref_store(),
1431 + ret = do_for_each_ref(get_main_ref_store(the_repository),
1432 buf.buf, fn, 0, 0, cb_data);
1433 strbuf_release(&buf);
1434 return ret;
@@ -1441,7 +1442,7 @@ int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1442
1443 int for_each_rawref(each_ref_fn fn, void *cb_data)
1444 {
1444 - return refs_for_each_rawref(get_main_ref_store(), fn, cb_data);
1445 + return refs_for_each_rawref(get_main_ref_store(the_repository), fn, cb_data);
1446 }
1447
1448 int refs_read_raw_ref(struct ref_store *ref_store,
@@ -1547,7 +1548,7 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs,
1548 /* backend functions */
1549 int refs_init_db(struct strbuf *err)
1550 {
1550 - struct ref_store *refs = get_main_ref_store();
1551 + struct ref_store *refs = get_main_ref_store(the_repository);
1552
1553 return refs->be->init_db(refs, err);
1554 }
@@ -1555,7 +1556,7 @@ int refs_init_db(struct strbuf *err)
1556 const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
1557 struct object_id *oid, int *flags)
1558 {
1558 - return refs_resolve_ref_unsafe(get_main_ref_store(), refname,
1559 + return refs_resolve_ref_unsafe(get_main_ref_store(the_repository), refname,
1560 resolve_flags, oid, flags);
1561 }
1562
@@ -1651,7 +1652,7 @@ static struct ref_store *ref_store_init(const char *gitdir,
1652 return refs;
1653 }
1654
1654 -struct ref_store *get_main_ref_store(void)
1655 +struct ref_store *get_main_ref_store_the_repository(void)
1656 {
1657 if (main_ref_store)
1658 return main_ref_store;
@@ -1726,7 +1727,7 @@ struct ref_store *get_worktree_ref_store(const struct worktree *wt)
1727 const char *id;
1728
1729 if (wt->is_current)
1729 - return get_main_ref_store();
1730 + return get_main_ref_store(the_repository);
1731
1732 id = wt->id ? wt->id : "/";
1733 refs = lookup_ref_store_map(&worktree_ref_stores, id);
@@ -1782,7 +1783,7 @@ int refs_peel_ref(struct ref_store *refs, const char *refname,
1783
1784 int peel_ref(const char *refname, struct object_id *oid)
1785 {
1785 - return refs_peel_ref(get_main_ref_store(), refname, oid);
1786 + return refs_peel_ref(get_main_ref_store(the_repository), refname, oid);
1787 }
1788
1789 int refs_create_symref(struct ref_store *refs,
@@ -1798,7 +1799,7 @@ int refs_create_symref(struct ref_store *refs,
1799 int create_symref(const char *ref_target, const char *refs_heads_master,
1800 const char *logmsg)
1801 {
1801 - return refs_create_symref(get_main_ref_store(), ref_target,
1802 + return refs_create_symref(get_main_ref_store(the_repository), ref_target,
1803 refs_heads_master, logmsg);
1804 }
1805
@@ -2006,7 +2007,7 @@ int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data)
2007
2008 int for_each_reflog(each_ref_fn fn, void *cb_data)
2009 {
2009 - return refs_for_each_reflog(get_main_ref_store(), fn, cb_data);
2010 + return refs_for_each_reflog(get_main_ref_store(the_repository), fn, cb_data);
2011 }
2012
2013 int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
@@ -2021,7 +2022,7 @@ int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
2022 int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn,
2023 void *cb_data)
2024 {
2024 - return refs_for_each_reflog_ent_reverse(get_main_ref_store(),
2025 + return refs_for_each_reflog_ent_reverse(get_main_ref_store(the_repository),
2026 refname, fn, cb_data);
2027 }
2028
@@ -2034,7 +2035,7 @@ int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname,
2035 int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn,
2036 void *cb_data)
2037 {
2037 - return refs_for_each_reflog_ent(get_main_ref_store(), refname,
2038 + return refs_for_each_reflog_ent(get_main_ref_store(the_repository), refname,
2039 fn, cb_data);
2040 }
2041
@@ -2045,7 +2046,7 @@ int refs_reflog_exists(struct ref_store *refs, const char *refname)
2046
2047 int reflog_exists(const char *refname)
2048 {
2048 - return refs_reflog_exists(get_main_ref_store(), refname);
2049 + return refs_reflog_exists(get_main_ref_store(the_repository), refname);
2050 }
2051
2052 int refs_create_reflog(struct ref_store *refs, const char *refname,
@@ -2057,7 +2058,7 @@ int refs_create_reflog(struct ref_store *refs, const char *refname,
2058 int safe_create_reflog(const char *refname, int force_create,
2059 struct strbuf *err)
2060 {
2060 - return refs_create_reflog(get_main_ref_store(), refname,
2061 + return refs_create_reflog(get_main_ref_store(the_repository), refname,
2062 force_create, err);
2063 }
2064
@@ -2068,7 +2069,7 @@ int refs_delete_reflog(struct ref_store *refs, const char *refname)
2069
2070 int delete_reflog(const char *refname)
2071 {
2071 - return refs_delete_reflog(get_main_ref_store(), refname);
2072 + return refs_delete_reflog(get_main_ref_store(the_repository), refname);
2073 }
2074
2075 int refs_reflog_expire(struct ref_store *refs,
@@ -2091,7 +2092,7 @@ int reflog_expire(const char *refname, const struct object_id *oid,
2092 reflog_expiry_cleanup_fn cleanup_fn,
2093 void *policy_cb_data)
2094 {
2094 - return refs_reflog_expire(get_main_ref_store(),
2095 + return refs_reflog_expire(get_main_ref_store(the_repository),
2096 refname, oid, flags,
2097 prepare_fn, should_prune_fn,
2098 cleanup_fn, policy_cb_data);
@@ -2114,7 +2115,7 @@ int refs_delete_refs(struct ref_store *refs, const char *msg,
2115 int delete_refs(const char *msg, struct string_list *refnames,
2116 unsigned int flags)
2117 {
2117 - return refs_delete_refs(get_main_ref_store(), msg, refnames, flags);
2118 + return refs_delete_refs(get_main_ref_store(the_repository), msg, refnames, flags);
2119 }
2120
2121 int refs_rename_ref(struct ref_store *refs, const char *oldref,
@@ -2125,7 +2126,7 @@ int refs_rename_ref(struct ref_store *refs, const char *oldref,
2126
2127 int rename_ref(const char *oldref, const char *newref, const char *logmsg)
2128 {
2128 - return refs_rename_ref(get_main_ref_store(), oldref, newref, logmsg);
2129 + return refs_rename_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);
2130 }
2131
2132 int refs_copy_existing_ref(struct ref_store *refs, const char *oldref,
@@ -2136,5 +2137,5 @@ int refs_copy_existing_ref(struct ref_store *refs, const char *oldref,
2137
2138 int copy_existing_ref(const char *oldref, const char *newref, const char *logmsg)
2139 {
2139 - return refs_copy_existing_ref(get_main_ref_store(), oldref, newref, logmsg);
2140 + return refs_copy_existing_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);
2141 }
refs.h
+3 -1
@@ -758,7 +758,9 @@ int reflog_expire(const char *refname, const struct object_id *oid,
758
759 int ref_storage_backend_exists(const char *name);
760
761 -struct ref_store *get_main_ref_store(void);
761 +#define get_main_ref_store(r) \
762 + get_main_ref_store_##r()
763 +struct ref_store *get_main_ref_store_the_repository(void);
764 /*
765 * Return the ref_store instance for the specified submodule. For the
766 * main repository, use submodule==NULL; such a call cannot fail. For
revision.c
+3 -2
@@ -6,6 +6,7 @@
6 #include "diff.h"
7 #include "refs.h"
8 #include "revision.h"
9 +#include "repository.h"
10 #include "graph.h"
11 #include "grep.h"
12 #include "reflog-walk.h"
@@ -1285,7 +1286,7 @@ void add_reflogs_to_pending(struct rev_info *revs, unsigned flags)
1286
1287 cb.all_revs = revs;
1288 cb.all_flags = flags;
1288 - cb.refs = get_main_ref_store();
1289 + cb.refs = get_main_ref_store(the_repository);
1290 for_each_reflog(handle_one_reflog, &cb);
1291
1292 if (!revs->single_worktree)
@@ -2176,7 +2177,7 @@ static int handle_revision_pseudo_opt(const char *submodule,
2177 die("BUG: --single-worktree cannot be used together with submodule");
2178 refs = get_submodule_ref_store(submodule);
2179 } else
2179 - refs = get_main_ref_store();
2180 + refs = get_main_ref_store(the_repository);
2181
2182 /*
2183 * NOTE!
t/helper/test-ref-store.c
+2 -1
@@ -3,6 +3,7 @@
3 #include "refs.h"
4 #include "worktree.h"
5 #include "object-store.h"
6 +#include "repository.h"
7
8 static const char *notnull(const char *arg, const char *name)
9 {
@@ -23,7 +24,7 @@ static const char **get_store(const char **argv, struct ref_store **refs)
24 if (!argv[0]) {
25 die("ref store required");
26 } else if (!strcmp(argv[0], "main")) {
26 - *refs = get_main_ref_store();
27 + *refs = get_main_ref_store(the_repository);
28 } else if (skip_prefix(argv[0], "submodule:", &gitdir)) {
29 struct strbuf sb = STRBUF_INIT;
30 int ret;