diff mbox series

[3/6] refs: allow skipping the reference-transaction hook

Message ID 0e42fc07f80903135bae10ac91e139f85ca9db54.1638874287.git.ps@pks.im (mailing list archive)
State Accepted
Commit 958fbc74e3d0fcc88b2065190e23db556a963644
Headers show
Series refs: excessive hook execution with packed refs | expand

Commit Message

Patrick Steinhardt Dec. 7, 2021, 10:56 a.m. UTC
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>
---
 refs.c | 3 +++
 refs.h | 5 +++++
 2 files changed, 8 insertions(+)
diff mbox series

Patch

diff --git a/refs.c b/refs.c
index 1c8a0c01f1..462e629d37 100644
--- a/refs.c
+++ b/refs.c
@@ -2076,6 +2076,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 e3d3b7aa14..840fa02613 100644
--- a/refs.h
+++ b/refs.h
@@ -546,6 +546,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().