Mercurial > public > mercurial-scm > hg
view mercurial/utils/repoviewutil.py @ 51746:c87c56ad6913
utils: avoid using internal _imp.is_frozen()
imp has been deprecated for a long time, and were removed in Python 3.12 . As a
workaround, we started using the internal _imp. That is ugly and risky.
It seems less risky to get the functionality in some other way. Here, we just
inspect if 'origin' of the '__main__' module is set and 'frozen'. That seems to
work and do the same, and might be better than using the internal _imp
directly.
This way of inspecting module attributes seems to work in some test cases, but
it is a risky change. This level of importlib doesn't have much documentation,
a complicated implementation, and we are dealing with some odd use cases.
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Tue, 27 Jun 2023 13:05:03 +0200 |
parents | 1a9bdd0e1c44 |
children | f4733654f144 |
line wrap: on
line source
# 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