# HG changeset patch # User Pierre-Yves David # Date 1579099623 -3600 # Node ID 2f1d6180737fa0763ffb5f36fe6ae7bc103b1d41 # Parent e598c874b4af5e1eed50ca87adb1a552ed919962 transaction: allow finalizer to add finalizer It will make some code (persistent nodemap related) simpler to write, because higher level code can blindly queue finalization without thinking too hard about the context. Differential Revision: https://phab.mercurial-scm.org/D7833 diff -r e598c874b4af -r 2f1d6180737f mercurial/transaction.py --- a/mercurial/transaction.py Sat Dec 28 12:25:16 2019 -0500 +++ b/mercurial/transaction.py Wed Jan 15 15:47:03 2020 +0100 @@ -506,9 +506,12 @@ self._validator(self) # will raise exception if needed self._validator = None # Help prevent cycles. self._generatefiles(group=gengroupprefinalize) - categories = sorted(self._finalizecallback) - for cat in categories: - self._finalizecallback[cat](self) + while self._finalizecallback: + callbacks = self._finalizecallback + self._finalizecallback = {} + categories = sorted(callbacks) + for cat in categories: + callbacks[cat](self) # Prevent double usage and help clear cycles. self._finalizecallback = None self._generatefiles(group=gengrouppostfinalize)