##// END OF EJS Templates
bookmark: use `list_paths` to access path definition...
bookmark: use `list_paths` to access path definition The content of the `[paths]` config section is receiving transformation that make it hard to recognise whats the actual name, and the next changeset will make it worse. So we use the official API for this instead. Differential Revision: https://phab.mercurial-scm.org/D10448

File last commit:

r43346:2372284d default
r47959:353718f7 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)