]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: allow passing flags when setting up a transaction
authorPatrick Steinhardt <ps@pks.im>
Wed, 20 Nov 2024 07:51:30 +0000 (08:51 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 Nov 2024 22:59:14 +0000 (07:59 +0900)
Allow passing flags when setting up a transaction such that the
behaviour of the transaction itself can be altered. This functionality
will be used in a subsequent patch.

Adapt callers accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 files changed:
branch.c
builtin/clone.c
builtin/fast-import.c
builtin/fetch.c
builtin/receive-pack.c
builtin/replace.c
builtin/tag.c
builtin/update-ref.c
refs.c
refs.h
refs/files-backend.c
refs/refs-internal.h
sequencer.c
walker.c

index 44977ad0aadbd40c878a0475ef2df2a20798936b..ebaa870c018747358255d3f150d136f0df447d5d 100644 (file)
--- a/branch.c
+++ b/branch.c
@@ -627,7 +627,7 @@ void create_branch(struct repository *r,
        else
                msg = xstrfmt("branch: Created from %s", start_name);
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 &err);
+                                                 0, &err);
        if (!transaction ||
                ref_transaction_update(transaction, ref.buf,
                                        &oid, forcing ? NULL : null_oid(),
index 59fcb317a68a77eee3ca96a60720c556e044c369..d963cc6eb5181e1af5bb29c07c3ee2fa24ad04ca 100644 (file)
@@ -574,7 +574,7 @@ static void write_remote_refs(const struct ref *local_refs)
        struct strbuf err = STRBUF_INIT;
 
        t = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                       &err);
+                                       0, &err);
        if (!t)
                die("%s", err.buf);
 
index 76d5c20f141f42da988dddae0e549144d1379031..db82c37a06f05d25e0a8c34cbec055e6f9717191 100644 (file)
@@ -1634,7 +1634,7 @@ static int update_branch(struct branch *b)
                }
        }
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 &err);
+                                                 0, &err);
        if (!transaction ||
            ref_transaction_update(transaction, b->name, &b->oid, &old_oid,
                                   NULL, NULL, 0, msg, &err) ||
@@ -1669,7 +1669,7 @@ static void dump_tags(void)
        struct ref_transaction *transaction;
 
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 &err);
+                                                 0, &err);
        if (!transaction) {
                failure |= error("%s", err.buf);
                goto cleanup;
index d9027e4dc9245a32a87c47d89f9a29fcfd42534c..68d291c7dd0a4fe805e3b006cc68b185481fba6b 100644 (file)
@@ -669,7 +669,7 @@ static int s_update_ref(const char *action,
         */
        if (!transaction) {
                transaction = our_transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                                           &err);
+                                                                           0, &err);
                if (!transaction) {
                        ret = STORE_REF_ERROR_OTHER;
                        goto out;
@@ -1671,7 +1671,7 @@ static int do_fetch(struct transport *transport,
 
        if (atomic_fetch) {
                transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                         &err);
+                                                         0, &err);
                if (!transaction) {
                        retcode = -1;
                        goto cleanup;
index ab5b20e39c5038cdf6e6f05f4d66278a9c1ac156..9d2c07f68dafb6fce87cb59abc1cbf27db9aae09 100644 (file)
@@ -1849,7 +1849,7 @@ static void execute_commands_non_atomic(struct command *commands,
                        continue;
 
                transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                         &err);
+                                                         0, &err);
                if (!transaction) {
                        rp_error("%s", err.buf);
                        strbuf_reset(&err);
@@ -1878,7 +1878,7 @@ static void execute_commands_atomic(struct command *commands,
        const char *reported_error = "atomic push failure";
 
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 &err);
+                                                 0, &err);
        if (!transaction) {
                rp_error("%s", err.buf);
                strbuf_reset(&err);
index a44f4e7ea9ff55dbd1f102aca5e5f5a046391328..a4eaadff91f1be107a8e0e25a701d2006ff8cac2 100644 (file)
@@ -201,7 +201,7 @@ static int replace_object_oid(const char *object_ref,
        }
 
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 &err);
+                                                 0, &err);
        if (!transaction ||
            ref_transaction_update(transaction, ref.buf, repl, &prev,
                                   NULL, NULL, 0, NULL, &err) ||
index 93d10d59157d2ee1b41f90640bd162917f1eb162..3fa0ab111344dda477763a74d26076b6fb71a5ab 100644 (file)
@@ -681,7 +681,7 @@ int cmd_tag(int argc,
        }
 
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 &err);
+                                                 0, &err);
        if (!transaction ||
            ref_transaction_update(transaction, ref.buf, &object, &prev,
                                   NULL, NULL,
index 8a98615dc8613a1be3b17c6d688ab9c0208ed003..670e7812d60ea88a20cd1c5cd113643095cb3be1 100644 (file)
@@ -612,7 +612,7 @@ static void update_refs_stdin(void)
        int i, j;
 
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 &err);
+                                                 0, &err);
        if (!transaction)
                die("%s", err.buf);
 
@@ -680,7 +680,7 @@ static void update_refs_stdin(void)
                         */
                        state = cmd->state;
                        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                                 &err);
+                                                                 0, &err);
                        if (!transaction)
                                die("%s", err.buf);
 
diff --git a/refs.c b/refs.c
index 5f729ed4124f7fe8fa9df7fd1f1ce951abefc585..9effeb01eb45728514eab0ca92404ea8cf2158d9 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -918,7 +918,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,
                                   NULL, flags, msg, &err) ||
@@ -1116,6 +1116,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;
@@ -1123,6 +1124,7 @@ struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
 
        CALLOC_ARRAY(tr, 1);
        tr->ref_store = refs;
+       tr->flags = flags;
        return tr;
 }
 
@@ -1309,7 +1311,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, NULL, NULL,
                                   flags, msg, &err) ||
@@ -2120,7 +2122,7 @@ int refs_update_symref(struct ref_store *refs, const char *ref,
        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(transaction, ref, NULL, NULL,
                                   target, NULL, REF_NO_DEREF,
@@ -2527,7 +2529,7 @@ int refs_delete_refs(struct ref_store *refs, const char *logmsg,
         * individual updates can't fail, so we can pack all of the
         * updates into a single transaction.
         */
-       transaction = ref_store_transaction_begin(refs, &err);
+       transaction = ref_store_transaction_begin(refs, 0, &err);
        if (!transaction) {
                ret = error("%s", err.buf);
                goto out;
@@ -2833,7 +2835,7 @@ int repo_migrate_ref_storage_format(struct repository *repo,
        if (ret < 0)
                goto done;
 
-       transaction = ref_store_transaction_begin(new_refs, errbuf);
+       transaction = ref_store_transaction_begin(new_refs, 0, errbuf);
        if (!transaction)
                goto done;
 
diff --git a/refs.h b/refs.h
index 108dfc93b3428db491916ad8a55daea649d83ffd..9821f3e80d900b31c3dede489c2f415d968233d7 100644 (file)
--- a/refs.h
+++ b/refs.h
@@ -234,7 +234,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(...) ||
@@ -584,6 +584,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);
 
 /*
index 0824c0b8a946909791da36ddb4171db4ad98913b..df61057c9f24972b72644407cc95057891338d96 100644 (file)
@@ -1252,7 +1252,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(
@@ -1396,7 +1396,8 @@ static int files_pack_refs(struct ref_store *ref_store,
        if (!should_pack_refs(refs, opts))
                return 0;
 
-       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;
 
@@ -2867,7 +2868,8 @@ 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,
+                                               transaction->flags, err);
                                if (!packed_transaction) {
                                        ret = TRANSACTION_GENERIC_ERROR;
                                        goto cleanup;
@@ -3174,7 +3176,8 @@ 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,
+                                                        transaction->flags, err);
        if (!packed_transaction) {
                ret = TRANSACTION_GENERIC_ERROR;
                goto cleanup;
index 2313c830d8facaa17b0b4b073df0de958023062a..dbc6360c5a1d410c192e7eee1bffb1d423e1f9ee 100644 (file)
@@ -193,6 +193,7 @@ struct ref_transaction {
        size_t nr;
        enum ref_transaction_state state;
        void *backend_data;
+       unsigned int flags;
 };
 
 /*
index 353d804999b88d5fd5dcf1254d80781f20e62f2e..287f4e5e8766327da6f31e87ce0c20f63b302b77 100644 (file)
@@ -662,7 +662,7 @@ static int fast_forward_to(struct repository *r,
        strbuf_addf(&sb, "%s: fast-forward", action_name(opts));
 
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 &err);
+                                                 0, &err);
        if (!transaction ||
            ref_transaction_update(transaction, "HEAD",
                                   to, unborn && !is_rebase_i(opts) ?
@@ -1297,7 +1297,7 @@ int update_head_with_reflog(const struct commit *old_head,
        }
 
        transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                 err);
+                                                 0, err);
        if (!transaction ||
            ref_transaction_update(transaction, "HEAD", new_head,
                                   old_head ? &old_head->object.oid : null_oid(),
@@ -3890,7 +3890,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;
index 5ea7e5b392b2bd49f249a9acc8d7ce8779357e1b..7cc9dbea46d64d6bd3336025d640f284a6202157 100644 (file)
--- a/walker.c
+++ b/walker.c
@@ -290,7 +290,7 @@ int walker_fetch(struct walker *walker, int targets, char **target,
 
        if (write_ref) {
                transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
-                                                         &err);
+                                                         0, &err);
                if (!transaction) {
                        error("%s", err.buf);
                        goto done;