mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
771c21f193
This is often very handy when hacking/debugging. Calling util.debugstacktrace('hey') from a place in hg will give something like: hey at: ./hg:38 in <module> /home/user/hgsrc/mercurial/dispatch.py:28 in run /home/user/hgsrc/mercurial/dispatch.py:65 in dispatch /home/user/hgsrc/mercurial/dispatch.py:88 in _runcatch /home/user/hgsrc/mercurial/dispatch.py:740 in _dispatch /home/user/hgsrc/mercurial/dispatch.py:514 in runcommand /home/user/hgsrc/mercurial/dispatch.py:830 in _runcommand /home/user/hgsrc/mercurial/dispatch.py:801 in checkargs /home/user/hgsrc/mercurial/dispatch.py:737 in <lambda> /home/user/hgsrc/mercurial/util.py:472 in check ...
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""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
|