Mercurial > hg
view mercurial/utils/repoviewutil.py @ 52164:e01e84e5e426
rust-revlog: add a Rust-only `InnerRevlog`
This mirrors the Python `InnerRevlog` and will be used in a future patch
to replace said Python implementation. This allows us to start doing more
things in pure Rust, in particular reading and writing operations.
A lot of changes have to be introduced all at once, it wouldn't be very
useful to separate this patch IMO since all of them are either interlocked
or only useful with the rest.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Thu, 10 Oct 2024 10:34:51 +0200 |
parents | f4733654f144 |
children |
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 __future__ import annotations 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