]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: allow skipping the reference-transaction hook
authorPatrick Steinhardt <ps@pks.im>
Mon, 17 Jan 2022 08:12:39 +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 executing whenever we prepare, commit
or abort a reference transaction. While this is mostly intentional, in
case of the files backend we're leaking the implementation detail that
the store is in fact a composite store with one loose and one packed
backend to the caller. So while we want to execute the hook for all
logical updates, executing it for such implementation details is
unexpected.

Prepare for a fix by adding a new flag which allows to skip execution of
the hook.

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

diff --git a/refs.c b/refs.c
index 7415864b6290a35f638ecab1822ecef1290a9e0e..526bf5ed97acce01b20b3b5c51a7fdd52ffffc78 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -2084,6 +2084,9 @@ static int run_transaction_hook(struct ref_transaction *transaction,
        const char *hook;
        int ret = 0, i;
 
+       if (transaction->flags & REF_TRANSACTION_SKIP_HOOK)
+               return 0;
+
        hook = find_hook("reference-transaction");
        if (!hook)
                return ret;
diff --git a/refs.h b/refs.h
index 31f7bf964247ef01764e8096617c0ed1f1a6ac0e..d4056f9fe263218e34643e1dd9d0a40bcd8b1dca 100644 (file)
--- a/refs.h
+++ b/refs.h
@@ -568,6 +568,11 @@ enum action_on_err {
        UPDATE_REFS_QUIET_ON_ERR
 };
 
+/*
+ * Skip executing the reference-transaction hook.
+ */
+#define REF_TRANSACTION_SKIP_HOOK (1 << 0)
+
 /*
  * Begin a reference transaction.  The reference transaction must
  * be freed by calling ref_transaction_free().