##// END OF EJS Templates
compat: initialize LC_CTYPE locale on all Python versions and platforms...
compat: initialize LC_CTYPE locale on all Python versions and platforms Previously, the LC_CTYPE locale was not initialized according to user settings on all Python versions (e.g. never on Python 2) and platforms (e.g. not on some Python < 3.8 on Windows). This broke e.g. non-ASCII filenames passed to the Subversion bindings on Python 2, resulting in error messages like "file:///tmp/a%C3%A4 does not look like a Subversion repository to libsvn version 1.14.0". The following command could be used to test this functionality. Adding it to the test suite would be pointless, as the locale is always set to "C" during test runs. @command(b'check_initial_codeset', norepo=True) def check_initial_codeset(ui): codeset1 = locale.nl_langinfo(locale.CODESET) locale.setlocale(locale.LC_ALL, '') codeset2 = locale.nl_langinfo(locale.CODESET) assert codeset1 == codeset2

File last commit:

r43346:2372284d default
r45538:a25343d1 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)