Mercurial > public > mercurial-scm > hg
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 |