comparison mercurial/changelog.py @ 23281:f60ed8cf4afc

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.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Sat, 08 Nov 2014 16:31:38 +0000
parents b01c491af0cf
children e44399c494ab
comparison
equal deleted inserted replaced
23280:b01c491af0cf 23281:f60ed8cf4afc
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> 3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 # 4 #
5 # This software may be used and distributed according to the terms of the 5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version. 6 # GNU General Public License version 2 or any later version.
7 7
8 import weakref
9 from node import bin, hex, nullid 8 from node import bin, hex, nullid
10 from i18n import _ 9 from i18n import _
11 import util, error, revlog, encoding 10 import util, error, revlog, encoding
12 11
13 _defaultextra = {'branch': 'default'} 12 _defaultextra = {'branch': 'default'}
238 self._delaybuf = [] 237 self._delaybuf = []
239 self.opener = _delayopener(self._realopener, self.indexfile, 238 self.opener = _delayopener(self._realopener, self.indexfile,
240 self._delaybuf) 239 self._delaybuf)
241 self._delayed = True 240 self._delayed = True
242 tr.addpending('cl-%i' % id(self), self._writepending) 241 tr.addpending('cl-%i' % id(self), self._writepending)
243 trp = weakref.proxy(tr) 242 tr.addfinalize('cl-%i' % id(self), self._finalize)
244 tr.addfinalize('cl-%i' % id(self), lambda: self._finalize(trp))
245 243
246 def _finalize(self, tr): 244 def _finalize(self, tr):
247 "finalize index updates" 245 "finalize index updates"
248 self._delayed = False 246 self._delayed = False
249 self.opener = self._realopener 247 self.opener = self._realopener