##// END OF EJS Templates
annotate: always prepare ancestry context of base fctx (issue4600)...
annotate: always prepare ancestry context of base fctx (issue4600) This patch extends the workaround introduced by dd01834a696f. Even if the base fctx is the same as intorrev, _ancestrycontext must be built for faster _changeid lookup. repo: https://hg.mozilla.org/releases/mozilla-beta command: hg annotate -r 4954faa47dd0 gfx/thebes/gfxWindowsPlatform.cpp before: 52.450 sec after: 1.820 sec

File last commit:

r20244:47d08436 default
r24753:612ed41a stable
Show More
lock-checker.py
39 lines | 1.3 KiB | text/x-python | PythonLexer
"""Extension to verify locks are obtained in the required places.
This works by wrapping functions that should be surrounded by a lock
and asserting the lock is held. Missing locks are called out with a
traceback printed to stderr.
This currently only checks store locks, not working copy locks.
"""
import os
from mercurial import util
def _checklock(repo):
l = repo._lockref and repo._lockref()
if l is None or not l.held:
util.debugstacktrace('missing lock', skip=1)
def reposetup(ui, repo):
orig = repo.__class__
class lockcheckrepo(repo.__class__):
def _writejournal(self, *args, **kwargs):
_checklock(self)
return orig._writejournal(self, *args, **kwargs)
def transaction(self, *args, **kwargs):
_checklock(self)
return orig.transaction(self, *args, **kwargs)
# TODO(durin42): kiilerix had a commented-out lock check in
# _writebranchcache and _writerequirements
def _tag(self, *args, **kwargs):
_checklock(self)
return orig._tag(self, *args, **kwargs)
def write(self, *args, **kwargs):
assert os.path.lexists(self._join('.hg/wlock'))
return orig.write(self, *args, **kwargs)
repo.__class__ = lockcheckrepo