# HG changeset patch # User Pierre-Yves David # Date 1415464298 0 # Node ID f60ed8cf4afc742e569e0e9d8c21a643485a4247 # Parent b01c491af0cf7816f691d4f86a2f50261ac20309 transaction: pass the transaction to 'finalize' callback The callback will likely need to perform some operation related to the transaction (eg: registering file update). So we better pass the current transaction as the callback argument. Otherwise callback that needs it has to rely on horrible weak reference trick. This allow already allow us to slay a wild weak reference usage. diff -r b01c491af0cf -r f60ed8cf4afc mercurial/changelog.py --- a/mercurial/changelog.py Sat Nov 08 16:27:50 2014 +0000 +++ b/mercurial/changelog.py Sat Nov 08 16:31:38 2014 +0000 @@ -5,7 +5,6 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -import weakref from node import bin, hex, nullid from i18n import _ import util, error, revlog, encoding @@ -240,8 +239,7 @@ self._delaybuf) self._delayed = True tr.addpending('cl-%i' % id(self), self._writepending) - trp = weakref.proxy(tr) - tr.addfinalize('cl-%i' % id(self), lambda: self._finalize(trp)) + tr.addfinalize('cl-%i' % id(self), self._finalize) def _finalize(self, tr): "finalize index updates" diff -r b01c491af0cf -r f60ed8cf4afc mercurial/transaction.py --- a/mercurial/transaction.py Sat Nov 08 16:27:50 2014 +0000 +++ b/mercurial/transaction.py Sat Nov 08 16:31:38 2014 +0000 @@ -304,6 +304,8 @@ def addfinalize(self, category, callback): """add a callback to be called when the transaction is closed + The transaction will be given as callback's first argument. + Category is a unique identifier to allow overwriting old callbacks with newer callbacks. """ @@ -325,7 +327,7 @@ self._generatefiles() categories = sorted(self._finalizecallback) for cat in categories: - self._finalizecallback[cat]() + self._finalizecallback[cat](self) self.onclose() self.count -= 1