]> git.ipfire.org Git - thirdparty/git.git/commitdiff
branch: stop modifying `log_all_ref_updates` variable
authorPatrick Steinhardt <ps@pks.im>
Thu, 12 Sep 2024 11:30:10 +0000 (13:30 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 12 Sep 2024 17:15:43 +0000 (10:15 -0700)
In "branch.c" we modify the global `log_all_ref_updates` variable to
force creation of a reflog entry. Modifying global state like this is
discouraged, as it may have all kinds of consequences in other places of
our codebase.

Stop modifying the variable and pass the `REF_FORCE_CREATE_REFLOG` flag
instead. Setting this flag has a stronger meaning than setting the
config to `LOG_REFS_NORMAL`:

  - `LOG_REFS_NORMAL` will ask us to only create reflog entries for
    preexisting reflogs or branches, remote refs, note refs and HEAD.

  - `REF_FORCE_CREATE_REFLOG` will unconditionally create a reflog and
    is thus equivalent to `LOG_REFS_ALWAYS`.

But as we are in `create_branch()` and thus do not have to worry about
arbitrary references, but only about branches, `LOG_REFS_NORMAL` and
`LOG_REFS_ALWAYS` are indeed equivalent.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
branch.c

index c887ea215147ce530cc4104bd61bd883367e7e17..08fa4094d2bf1ed3d7c0b84272cea7b497a7acc6 100644 (file)
--- a/branch.c
+++ b/branch.c
@@ -601,6 +601,7 @@ void create_branch(struct repository *r,
        int forcing = 0;
        struct ref_transaction *transaction;
        struct strbuf err = STRBUF_INIT;
+       int flags = 0;
        char *msg;
 
        if (track == BRANCH_TRACK_OVERRIDE)
@@ -619,7 +620,7 @@ void create_branch(struct repository *r,
                goto cleanup;
 
        if (reflog)
-               log_all_ref_updates = LOG_REFS_NORMAL;
+               flags |= REF_FORCE_CREATE_REFLOG;
 
        if (forcing)
                msg = xstrfmt("branch: Reset to %s", start_name);
@@ -630,7 +631,7 @@ void create_branch(struct repository *r,
        if (!transaction ||
                ref_transaction_update(transaction, ref.buf,
                                        &oid, forcing ? NULL : null_oid(),
-                                       NULL, NULL, 0, msg, &err) ||
+                                       NULL, NULL, flags, msg, &err) ||
                ref_transaction_commit(transaction, &err))
                die("%s", err.buf);
        ref_transaction_free(transaction);