##// END OF EJS Templates
revsetbenchmark: automatically finds the perf extension...
revsetbenchmark: automatically finds the perf extension Before this changeset, you had to stand in the root of the mercurial repo to run the `revsetbenchmark.py` script. Otherwise, the perf extension would not be found a `./contrib/perf.py` and the script would crash in panic. We now figure out the contrib directory from the location of this script. This makes it possible to run the script from other location that the mercurial repo root (but you still need to be in the core mercurial repository)

File last commit:

r20244:47d08436 default
r21548:651d7548 default
Show More
lock-checker.py
39 lines | 1.3 KiB | text/x-python | PythonLexer
Augie Fackler
lock-checker: new contrib extension based on work done by Mads...
r17669 """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
Mads Kiilerich
util: introduce util.debugstacktrace for showing a stack trace without crashing...
r20244 from mercurial import util
Augie Fackler
lock-checker: new contrib extension based on work done by Mads...
r17669
def _checklock(repo):
l = repo._lockref and repo._lockref()
if l is None or not l.held:
Mads Kiilerich
util: introduce util.debugstacktrace for showing a stack trace without crashing...
r20244 util.debugstacktrace('missing lock', skip=1)
Augie Fackler
lock-checker: new contrib extension based on work done by Mads...
r17669
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
Mads Kiilerich
spelling: fix minor spell checker issues
r17738 # _writebranchcache and _writerequirements
Augie Fackler
lock-checker: new contrib extension based on work done by Mads...
r17669
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