Source code for pkgcore.pkgsets.live_rebuild_set

"""A pkgset hack to provide a live-rebuild equivalent.

Note: HACK. Quick proof of concept, could do with cleaning up.
"""

from ..config.hint import ConfigHint
from ..repository.util import RepositoryGroup
from .installed import VersionedInstalled


[docs] class EclassConsumerSet(VersionedInstalled): pkgcore_config_type = ConfigHint( typename="pkgset", types={"vdb": "refs:repo", "repos": "refs:repo", "eclasses": "list"}, ) def __init__(self, vdb, repos, eclasses): VersionedInstalled.__init__(self, vdb) self.repos = RepositoryGroup(repos) self.eclasses = frozenset(eclasses) def __iter__(self): for atom in VersionedInstalled.__iter__(self): pkgs = self.repos.match(atom) if not pkgs: # pkg is installed but no longer in any repo, just ignore it. continue assert len(pkgs) == 1, f"I do not know what I am doing: {pkgs}" pkg = pkgs[0] if self.eclasses.isdisjoint(pkg.data.get("_eclasses_", ())): yield atom