refs: allow passing flags when beginning transactions

We do not currently have any flags when creating reference transactions, but we'll add one to disable execution of the reference transaction hook in some cases. Allow passing flags to `ref_store_transaction_begin()` to prepare for this change. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Jan 17, 2022 at 09:12 UTC fbe73f61cbc29f6c4a85478cf792c37dbe5aa26c
6 files changed +15 -11
refs.c
+5 -3
@@ -800,7 +800,7 @@ int refs_delete_ref(struct ref_store *refs, const char *msg,
800 struct ref_transaction *transaction;
801 struct strbuf err = STRBUF_INIT;
802
803 - transaction = ref_store_transaction_begin(refs, &err);
803 + transaction = ref_store_transaction_begin(refs, 0, &err);
804 if (!transaction ||
805 ref_transaction_delete(transaction, refname, old_oid,
806 flags, msg, &err) ||
@@ -1005,6 +1005,7 @@ int read_ref_at(struct ref_store *refs, const char *refname,
1005 }
1006
1007 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
1008 + unsigned int flags,
1009 struct strbuf *err)
1010 {
1011 struct ref_transaction *tr;
@@ -1012,12 +1013,13 @@ struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
1013
1014 CALLOC_ARRAY(tr, 1);
1015 tr->ref_store = refs;
1016 + tr->flags = flags;
1017 return tr;
1018 }
1019
1020 struct ref_transaction *ref_transaction_begin(struct strbuf *err)
1021 {
1020 - return ref_store_transaction_begin(get_main_ref_store(the_repository), err);
1022 + return ref_store_transaction_begin(get_main_ref_store(the_repository), 0, err);
1023 }
1024
1025 void ref_transaction_free(struct ref_transaction *transaction)
@@ -1156,7 +1158,7 @@ int refs_update_ref(struct ref_store *refs, const char *msg,
1158 struct strbuf err = STRBUF_INIT;
1159 int ret = 0;
1160
1159 - t = ref_store_transaction_begin(refs, &err);
1161 + t = ref_store_transaction_begin(refs, 0, &err);
1162 if (!t ||
1163 ref_transaction_update(t, refname, new_oid, old_oid, flags, msg,
1164 &err) ||
refs.h
+2 -1
@@ -231,7 +231,7 @@ char *repo_default_branch_name(struct repository *r, int quiet);
231 * struct strbuf err = STRBUF_INIT;
232 * int ret = 0;
233 *
234 - * transaction = ref_store_transaction_begin(refs, &err);
234 + * transaction = ref_store_transaction_begin(refs, 0, &err);
235 * if (!transaction ||
236 * ref_transaction_update(...) ||
237 * ref_transaction_create(...) ||
@@ -573,6 +573,7 @@ enum action_on_err {
573 * be freed by calling ref_transaction_free().
574 */
575 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
576 + unsigned int flags,
577 struct strbuf *err);
578 struct ref_transaction *ref_transaction_begin(struct strbuf *err);
579
refs/files-backend.c
+5 -5
@@ -1121,7 +1121,7 @@ static void prune_ref(struct files_ref_store *refs, struct ref_to_prune *r)
1121 if (check_refname_format(r->name, 0))
1122 return;
1123
1124 - transaction = ref_store_transaction_begin(&refs->base, &err);
1124 + transaction = ref_store_transaction_begin(&refs->base, 0, &err);
1125 if (!transaction)
1126 goto cleanup;
1127 ref_transaction_add_update(
@@ -1192,7 +1192,7 @@ static int files_pack_refs(struct ref_store *ref_store, unsigned int flags)
1192 struct strbuf err = STRBUF_INIT;
1193 struct ref_transaction *transaction;
1194
1195 - transaction = ref_store_transaction_begin(refs->packed_ref_store, &err);
1195 + transaction = ref_store_transaction_begin(refs->packed_ref_store, 0, &err);
1196 if (!transaction)
1197 return -1;
1198
@@ -1259,7 +1259,7 @@ static int files_delete_refs(struct ref_store *ref_store, const char *msg,
1259 if (packed_refs_lock(refs->packed_ref_store, 0, &err))
1260 goto error;
1261
1262 - transaction = ref_store_transaction_begin(refs->packed_ref_store, &err);
1262 + transaction = ref_store_transaction_begin(refs->packed_ref_store, 0, &err);
1263 if (!transaction)
1264 goto error;
1265
@@ -2774,7 +2774,7 @@ static int files_transaction_prepare(struct ref_store *ref_store,
2774 */
2775 if (!packed_transaction) {
2776 packed_transaction = ref_store_transaction_begin(
2777 - refs->packed_ref_store, err);
2777 + refs->packed_ref_store, 0, err);
2778 if (!packed_transaction) {
2779 ret = TRANSACTION_GENERIC_ERROR;
2780 goto cleanup;
@@ -3045,7 +3045,7 @@ static int files_initial_transaction_commit(struct ref_store *ref_store,
3045 &affected_refnames))
3046 BUG("initial ref transaction called with existing refs");
3047
3048 - packed_transaction = ref_store_transaction_begin(refs->packed_ref_store, err);
3048 + packed_transaction = ref_store_transaction_begin(refs->packed_ref_store, 0, err);
3049 if (!packed_transaction) {
3050 ret = TRANSACTION_GENERIC_ERROR;
3051 goto cleanup;
refs/packed-backend.c
+1 -1
@@ -1535,7 +1535,7 @@ static int packed_delete_refs(struct ref_store *ref_store, const char *msg,
1535 * updates into a single transaction.
1536 */
1537
1538 - transaction = ref_store_transaction_begin(ref_store, &err);
1538 + transaction = ref_store_transaction_begin(ref_store, 0, &err);
1539 if (!transaction)
1540 return -1;
1541
refs/refs-internal.h
+1
@@ -213,6 +213,7 @@ struct ref_transaction {
213 size_t nr;
214 enum ref_transaction_state state;
215 void *backend_data;
216 + unsigned int flags;
217 };
218
219 /*
sequencer.c
+1 -1
@@ -3588,7 +3588,7 @@ static int do_label(struct repository *r, const char *name, int len)
3588 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3589 strbuf_addf(&msg, "rebase (label) '%.*s'", len, name);
3590
3591 - transaction = ref_store_transaction_begin(refs, &err);
3591 + transaction = ref_store_transaction_begin(refs, 0, &err);
3592 if (!transaction) {
3593 error("%s", err.buf);
3594 ret = -1;