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;