]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: do not execute reference-transaction hook on packing refs
authorPatrick Steinhardt <ps@pks.im>
Mon, 17 Jan 2022 08:12:48 +0000 (09:12 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 17 Jan 2022 19:01:45 +0000 (11:01 -0800)
The reference-transaction hook is supposed to track logical changes to
references, but it currently also gets executed when packing refs in a
repository. This is unexpected and ultimately not all that useful:
packing refs is not supposed to result in any user-visible change to the
refs' state, and it ultimately is an implementation detail of how refs
stores work.

Fix this excessive execution of the hook when packing refs.

Reported-by: Waleed Khan <me@waleedkhan.name>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs/files-backend.c
t/t1416-ref-transaction-hooks.sh

index 4d4f0c2099c6ccb42760098c0bff1eb72d23bcd5..565929210abedb5cf2f39e8616af8b4fd780c087 100644 (file)
@@ -1121,7 +1121,8 @@ 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, 0, &err);
+       transaction = ref_store_transaction_begin(&refs->base,
+                                                 REF_TRANSACTION_SKIP_HOOK, &err);
        if (!transaction)
                goto cleanup;
        ref_transaction_add_update(
@@ -1192,7 +1193,8 @@ 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, 0, &err);
+       transaction = ref_store_transaction_begin(refs->packed_ref_store,
+                                                 REF_TRANSACTION_SKIP_HOOK, &err);
        if (!transaction)
                return -1;
 
index 0567fbdf0b2b55b651e9b181d46e94c57574fc2d..f9d3d5213f8992860062aea1431170d1264f496d 100755 (executable)
@@ -150,21 +150,12 @@ test_expect_success 'hook does not get called on packing refs' '
        git pack-refs --all &&
 
        # We only expect a single hook invocation, which is the call to
-       # git-update-ref(1). But currently, packing refs will also trigger the
-       # hook.
+       # git-update-ref(1).
        cat >expect <<-EOF &&
                prepared
                $ZERO_OID $POST_OID refs/heads/unpacked-ref
                committed
                $ZERO_OID $POST_OID refs/heads/unpacked-ref
-               prepared
-               $ZERO_OID $POST_OID refs/heads/unpacked-ref
-               committed
-               $ZERO_OID $POST_OID refs/heads/unpacked-ref
-               prepared
-               $POST_OID $ZERO_OID refs/heads/unpacked-ref
-               committed
-               $POST_OID $ZERO_OID refs/heads/unpacked-ref
        EOF
 
        test_cmp expect actual