comparison mercurial/changelog.py @ 23205:2d54aa5397cd

changelog: rely on transaction for finalization Instead of calling 'cl.finalize()' by hand (possibly at a bogus time) we register it in the transaction during 'delayupdate' and rely on 'tr.close()' to call it at the right time.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Sat, 18 Oct 2014 01:09:41 -0700
parents 3872d563e01a
children b01c491af0cf
comparison
equal deleted inserted replaced
23204:10beda5bd2b7 23205:2d54aa5397cd
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
8 from node import bin, hex, nullid 9 from node import bin, hex, nullid
9 from i18n import _ 10 from i18n import _
10 import util, error, revlog, encoding 11 import util, error, revlog, encoding
11 12
12 _defaultextra = {'branch': 'default'} 13 _defaultextra = {'branch': 'default'}
237 self._delaybuf = [] 238 self._delaybuf = []
238 self.opener = _delayopener(self._realopener, self.indexfile, 239 self.opener = _delayopener(self._realopener, self.indexfile,
239 self._delaybuf) 240 self._delaybuf)
240 self._delayed = True 241 self._delayed = True
241 tr.addpending('cl-%i' % id(self), self._writepending) 242 tr.addpending('cl-%i' % id(self), self._writepending)
242 243 trp = weakref.proxy(tr)
243 def finalize(self, tr): 244 tr.addfinalize('cl-%i' % id(self), lambda: self._finalize(trp))
245
246 def _finalize(self, tr):
244 "finalize index updates" 247 "finalize index updates"
245 self._delayed = False 248 self._delayed = False
246 self.opener = self._realopener 249 self.opener = self._realopener
247 # move redirected index data back into place 250 # move redirected index data back into place
248 if self._divert: 251 if self._divert: