##// END OF EJS Templates
setup: exclude the git extension from py2 builds...
setup: exclude the git extension from py2 builds This can't be built on Windows with the py2 compiler, and while old versions can be installed via pip on Linux, I can't get the tests to run (even with py3.8) using pygit2 0.28.2. Some manually run commands work, and others spew stack traces that don't occur with the current 1.4.0 release using py3. Differential Revision: https://phab.mercurial-scm.org/D9604

File last commit:

r43346:2372284d default
r46752:31585220 default
Show More
dirstatenonnormalcheck.py
65 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,
)
Augie Fackler
formatting: blacken the codebase...
r43346
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591 def nonnormalentries(dmap):
"""Compute nonnormal entries from dirstate's dmap"""
res = set()
for f, e in dmap.iteritems():
Augie Fackler
contrib: fix dirstatenonnormalcheck to work in Python 3...
r35896 if e[0] != b'n' or e[3] == -1:
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591 res.add(f)
return res
Augie Fackler
formatting: blacken the codebase...
r43346
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591 def checkconsistency(ui, orig, dmap, _nonnormalset, label):
"""Compute nonnormalset from dmap, check that it matches _nonnormalset"""
nonnormalcomputedmap = nonnormalentries(dmap)
if _nonnormalset != nonnormalcomputedmap:
Augie Fackler
contrib: fix dirstatenonnormalcheck to work in Python 3...
r35896 ui.develwarn(b"%s call to %s\n" % (label, orig), config=b'dirstate')
ui.develwarn(b"inconsistency in nonnormalset\n", config=b'dirstate')
ui.develwarn(b"[nonnormalset] %s\n" % _nonnormalset, config=b'dirstate')
ui.develwarn(b"[map] %s\n" % nonnormalcomputedmap, config=b'dirstate')
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591
Augie Fackler
formatting: blacken the codebase...
r43346
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"""
Augie Fackler
formatting: blacken the codebase...
r43346 checkconsistency(
self._ui, orig, self._map, self._map.nonnormalset, b"before"
)
timeless
cleanup: remove superfluous space after space after equals (python)
r27637 r = orig(self, arg)
Augie Fackler
formatting: blacken the codebase...
r43346 checkconsistency(
self._ui, orig, self._map, self._map.nonnormalset, b"after"
)
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591 return r
Augie Fackler
formatting: blacken the codebase...
r43346
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591 def extsetup(ui):
"""Wrap functions modifying dirstate to check nonnormalset consistency"""
dirstatecl = dirstate.dirstate
Augie Fackler
contrib: fix dirstatenonnormalcheck to work in Python 3...
r35896 devel = ui.configbool(b'devel', b'all-warnings')
paranoid = ui.configbool(b'experimental', b'nonnormalparanoidcheck')
Laurent Charignon
dirstate: add test for non-normal set consistency...
r27591 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)