##// END OF EJS Templates
typing: add type hints to the `charencode` module...
typing: add type hints to the `charencode` module Since this module is dynamically imported from either `mercurial.pure` or `mercurial.cext`, these hints aren't detected in `mercurial.encoding`, and need to be imported directly there during the type-checking phase. This keeps the runtime selection via the policy config in place, but allows pytype to see these as functions with proper signatures instead of just `Any`. We don't attempt to import the `mercurial.cext` version yet because there's no types stubs for that module, but this will get the ball rolling. I thought this would spill over into other modules from there, but the only two *.pyi files that changed were for `encoding` and `charencode`. Applying this to other dynamically selected modules will clean some things up in other files, so this is a start. I had originally redefined the functions in the type-checking block (like some of the `os.path` aliasing in `mercurial.util`), but this is better because we won't have another duplication of the definitions that may get out of date.

File last commit:

r52380:1a9bdd0e default
r52615:43adbe03 default
Show More
repoviewutil.py
51 lines | 1.6 KiB | text/x-python | PythonLexer
# repoviewutil.py - constaints data relevant to repoview.py and other module
#
# Copyright 2012 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
# Logilab SA <contact@logilab.fr>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from .. import error
### Nearest subset relation
# Nearest subset of filter X is a filter Y so that:
# * Y is included in X,
# * X - Y is as small as possible.
# This create and ordering used for branchmap purpose.
# the ordering may be partial
subsettable = {
None: b'visible',
b'visible-hidden': b'visible',
b'visible': b'served',
b'served.hidden': b'served',
b'served': b'immutable',
b'immutable': b'base',
}
def get_ordered_subset():
"""return a list of subset name from dependencies to dependents"""
_unfinalized = set(subsettable.values())
ordered = []
# the subset table is expected to be small so we do the stupid N² version
# of the algorithm
while _unfinalized:
this_level = []
for candidate in _unfinalized:
dependency = subsettable.get(candidate)
if dependency not in _unfinalized:
this_level.append(candidate)
if not this_level:
msg = "cyclic dependencies in repoview subset %r"
msg %= subsettable
raise error.ProgrammingError(msg)
this_level.sort(key=lambda x: x if x is not None else '')
ordered.extend(this_level)
_unfinalized.difference_update(this_level)
return ordered