##// END OF EJS Templates
chg: forward user-defined signals...
chg: forward user-defined signals SIGUSR1 and SIGUSR2 are reserved for user-defined behaviors. They may be redefined by an hg extension [1], but cannot be easily redefined for chg. Since the default behavior (kill) is not that useful for chg, let's forward them to hg, hoping it got redefined there and could be more useful. [1] https://bitbucket.org/facebook/hg-experimental/commits/e7c883a465

File last commit:

r29100:3fd94f60 default
r31230:cc37b5a0 default
Show More
dirstatenonnormalcheck.py
57 lines | 2.6 KiB | text/x-python | PythonLexer
/ contrib / dirstatenonnormalcheck.py
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591 # dirstatenonnormalcheck.py - extension to check the consistency of the
# dirstate's non-normal map
#
# For most operations on dirstate, this extensions checks that the nonnormalset
# contains the right entries.
# It compares the nonnormal file to a nonnormalset built from the map of all
# the files in the dirstate to check that they contain the same files.
from __future__ import absolute_import
from mercurial import (
dirstate,
extensions,
)
def nonnormalentries(dmap):
"""Compute nonnormal entries from dirstate's dmap"""
res = set()
for f, e in dmap.iteritems():
if e[0] != 'n' or e[3] == -1:
res.add(f)
return res
def checkconsistency(ui, orig, dmap, _nonnormalset, label):
"""Compute nonnormalset from dmap, check that it matches _nonnormalset"""
nonnormalcomputedmap = nonnormalentries(dmap)
if _nonnormalset != nonnormalcomputedmap:
Pierre-Yves David
devel: use the 'config' argument for the dirstate normalisation develwarn
r29100 ui.develwarn("%s call to %s\n" % (label, orig), config='dirstate')
ui.develwarn("inconsistency in nonnormalset\n", config='dirstate')
ui.develwarn("[nonnormalset] %s\n" % _nonnormalset, config='dirstate')
ui.develwarn("[map] %s\n" % nonnormalcomputedmap, config='dirstate')
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591
def _checkdirstate(orig, self, arg):
"""Check nonnormal set consistency before and after the call to orig"""
checkconsistency(self._ui, orig, self._map, self._nonnormalset, "before")
timeless
cleanup: remove superfluous space after space after equals (python)
r27637 r = orig(self, arg)
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591 checkconsistency(self._ui, orig, self._map, self._nonnormalset, "after")
return r
def extsetup(ui):
"""Wrap functions modifying dirstate to check nonnormalset consistency"""
dirstatecl = dirstate.dirstate
devel = ui.configbool('devel', 'all-warnings')
paranoid = ui.configbool('experimental', 'nonnormalparanoidcheck')
if devel:
extensions.wrapfunction(dirstatecl, '_writedirstate', _checkdirstate)
if paranoid:
# We don't do all these checks when paranoid is disable as it would
# make the extension run very slowly on large repos
extensions.wrapfunction(dirstatecl, 'normallookup', _checkdirstate)
extensions.wrapfunction(dirstatecl, 'otherparent', _checkdirstate)
extensions.wrapfunction(dirstatecl, 'normal', _checkdirstate)
extensions.wrapfunction(dirstatecl, 'write', _checkdirstate)
extensions.wrapfunction(dirstatecl, 'add', _checkdirstate)
extensions.wrapfunction(dirstatecl, 'remove', _checkdirstate)
extensions.wrapfunction(dirstatecl, 'merge', _checkdirstate)
extensions.wrapfunction(dirstatecl, 'drop', _checkdirstate)