]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: allow passing flags when beginning transactions
authorPatrick Steinhardt <ps@pks.im>
Mon, 17 Jan 2022 08:12:35 +0000 (09:12 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 17 Jan 2022 19:01:44 +0000 (11:01 -0800)
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>
refs.c
refs.h
refs/files-backend.c
refs/packed-backend.c
refs/refs-internal.h
sequencer.c

diff --git a/refs.c b/refs.c
index 4da4996c4d0c59aa1519f6256e557d6f19e3fa16..7415864b6290a35f638ecab1822ecef1290a9e0e 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -800,7 +800,7 @@ int refs_delete_ref(struct ref_store *refs, const char *msg,
        struct ref_transaction *transaction;
        struct strbuf err = STRBUF_INIT;
 
-       transaction = ref_store_transaction_begin(refs, &err);
+       transaction = ref_store_transaction_begin(refs, 0, &err);
        if (!transaction ||
            ref_transaction_delete(transaction, refname, old_oid,
                                   flags, msg, &err) ||
@@ -1005,6 +1005,7 @@ int read_ref_at(struct ref_store *refs, const char *refname,
 }
 
 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
+                                                   unsigned int flags,
                                                    struct strbuf *err)
 {
        struct ref_transaction *tr;
@@ -1012,12 +1013,13 @@ struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
 
        CALLOC_ARRAY(tr, 1);
        tr->ref_store = refs;
+       tr->flags = flags;
        return tr;
 }
 
 struct ref_transaction *ref_transaction_begin(struct strbuf *err)
 {
-       return ref_store_transaction_begin(get_main_ref_store(the_repository), err);
+       return ref_store_transaction_begin(get_main_ref_store(the_repository), 0, err);
 }
 
 void ref_transaction_free(struct ref_transaction *transaction)
@@ -1156,7 +1158,7 @@ int refs_update_ref(struct ref_store *refs, const char *msg,
        struct strbuf err = STRBUF_INIT;
        int ret = 0;
 
-       t = ref_store_transaction_begin(refs, &err);
+       t = ref_store_transaction_begin(refs, 0, &err);
        if (!t ||
            ref_transaction_update(t, refname, new_oid, old_oid, flags, msg,
                                   &err) ||
diff --git a/refs.h b/refs.h
index 92360e55a2045970a2a75ed6ca5505f0a0beb8fa..31f7bf964247ef01764e8096617c0ed1f1a6ac0e 100644 (file)
--- a/refs.h
+++ b/refs.h
@@ -231,7 +231,7 @@ char *repo_default_branch_name(struct repository *r, int quiet);
  *         struct strbuf err = STRBUF_INIT;
  *         int ret = 0;
  *
- *         transaction = ref_store_transaction_begin(refs, &err);
+ *         transaction = ref_store_transaction_begin(refs, 0, &err);
  *         if (!transaction ||
  *             ref_transaction_update(...) ||
  *             ref_transaction_create(...) ||
@@ -573,6 +573,7 @@ enum action_on_err {
  * be freed by calling ref_transaction_free().
  */
 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
+                                                   unsigned int flags,
                                                    struct strbuf *err);
 struct ref_transaction *ref_transaction_begin(struct strbuf *err);
 
index 459f18dbc1cfbcdf6afcc6c9bcbff12672efdb94..4d4f0c2099c6ccb42760098c0bff1eb72d23bcd5 100644 (file)
@@ -1121,7 +1121,7 @@ static void prune_ref(struct files_ref_store *refs, struct ref_to_prune *r)
        if (check_refname_format(r->name, 0))
                return;
 
-       transaction = ref_store_transaction_begin(&refs->base, &err);
+       transaction = ref_store_transaction_begin(&refs->base, 0, &err);
        if (!transaction)
                goto cleanup;
        ref_transaction_add_update(
@@ -1192,7 +1192,7 @@ static int files_pack_refs(struct ref_store *ref_store, unsigned int flags)
        struct strbuf err = STRBUF_INIT;
        struct ref_transaction *transaction;
 
-       transaction = ref_store_transaction_begin(refs->packed_ref_store, &err);
+       transaction = ref_store_transaction_begin(refs->packed_ref_store, 0, &err);
        if (!transaction)
                return -1;
 
@@ -1259,7 +1259,7 @@ static int files_delete_refs(struct ref_store *ref_store, const char *msg,
        if (packed_refs_lock(refs->packed_ref_store, 0, &err))
                goto error;
 
-       transaction = ref_store_transaction_begin(refs->packed_ref_store, &err);
+       transaction = ref_store_transaction_begin(refs->packed_ref_store, 0, &err);
        if (!transaction)
                goto error;
 
@@ -2774,7 +2774,7 @@ static int files_transaction_prepare(struct ref_store *ref_store,
                         */
                        if (!packed_transaction) {
                                packed_transaction = ref_store_transaction_begin(
-                                               refs->packed_ref_store, err);
+                                               refs->packed_ref_store, 0, err);
                                if (!packed_transaction) {
                                        ret = TRANSACTION_GENERIC_ERROR;
                                        goto cleanup;
@@ -3045,7 +3045,7 @@ static int files_initial_transaction_commit(struct ref_store *ref_store,
                                 &affected_refnames))
                BUG("initial ref transaction called with existing refs");
 
-       packed_transaction = ref_store_transaction_begin(refs->packed_ref_store, err);
+       packed_transaction = ref_store_transaction_begin(refs->packed_ref_store, 0, err);
        if (!packed_transaction) {
                ret = TRANSACTION_GENERIC_ERROR;
                goto cleanup;
index c964dd1617621019619c2a46a813d1d11b59280a..0b45598e18bfc3e3ff038dd553bbc0fb342e4ffb 100644 (file)
@@ -1535,7 +1535,7 @@ static int packed_delete_refs(struct ref_store *ref_store, const char *msg,
         * updates into a single transaction.
         */
 
-       transaction = ref_store_transaction_begin(ref_store, &err);
+       transaction = ref_store_transaction_begin(ref_store, 0, &err);
        if (!transaction)
                return -1;
 
index 46a839539e33451f7debc980a1a23744a7094d05..a0af63f162fadad19d0fa973da4d932dd6cf8c21 100644 (file)
@@ -213,6 +213,7 @@ struct ref_transaction {
        size_t nr;
        enum ref_transaction_state state;
        void *backend_data;
+       unsigned int flags;
 };
 
 /*
index 6abd72160ccd46791d5a262021804e07ab9ea37f..61edd39d7a43aeb6eb0712ffb9ee2dc497ceebb0 100644 (file)
@@ -3588,7 +3588,7 @@ static int do_label(struct repository *r, const char *name, int len)
        strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
        strbuf_addf(&msg, "rebase (label) '%.*s'", len, name);
 
-       transaction = ref_store_transaction_begin(refs, &err);
+       transaction = ref_store_transaction_begin(refs, 0, &err);
        if (!transaction) {
                error("%s", err.buf);
                ret = -1;