commit: 8c6226597ff8613e5fe3c7efbb5f185ac3c9e223 Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Tue Jan 17 16:12:54 2023 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Tue Jan 17 16:12:54 2023 +0000 URL: https://gitweb.gentoo.org/proj/gentoopm.git/commit/?id=8c622659
repo: Add global_use dict Signed-off-by: Michał Górny <mgorny <AT> gentoo.org> gentoopm/basepm/repo.py | 34 +++++++++++++++++++++++++++++++++- gentoopm/pkgcorepm/repo.py | 10 +++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/gentoopm/basepm/repo.py b/gentoopm/basepm/repo.py index 914c6ec..9265981 100644 --- a/gentoopm/basepm/repo.py +++ b/gentoopm/basepm/repo.py @@ -1,9 +1,13 @@ #!/usr/bin/python # vim:fileencoding=utf-8 -# (c) 2011 Michał Górny <[email protected]> +# (c) 2011-2023 Michał Górny <[email protected]> # Released under the terms of the 2-clause BSD license. import os.path +import typing + +from pathlib import Path + from abc import abstractmethod, abstractproperty from ..util import ABCObject, FillMissingComparisons @@ -77,6 +81,13 @@ class PMRepository(PMPackageSet): """ +class GlobalUseFlag(typing.NamedTuple): + """Global USE flag (as defined by use.desc)""" + + name: str + description: str + + class PMEbuildRepository(PMRepository, FillMissingComparisons): """ Base abstract class for an ebuild repository (on livefs). @@ -101,6 +112,27 @@ class PMEbuildRepository(PMRepository, FillMissingComparisons): """ pass + @property + def global_use(self) -> dict[str, GlobalUseFlag]: + """Get dict of global USE flags as defined in use.desc""" + + # Portage does not implement use.desc support, so we roll out + # a generic implementation here + try: + with open(Path(self.path) / "profiles/use.desc", "r") as f: + def inner() -> typing.Generator[tuple[str, str], None, None]: + for line in f: + line = line.strip() + if not line or line[0] == "#": + continue + yield tuple(line.split(" - ", 1)) + return { + name: GlobalUseFlag(name, desc) for name, desc in inner() + } + + except FileNotFoundError: + return {} + @abstractmethod def __lt__(self, other): pass diff --git a/gentoopm/pkgcorepm/repo.py b/gentoopm/pkgcorepm/repo.py index 83a7efd..bd2c7b1 100644 --- a/gentoopm/pkgcorepm/repo.py +++ b/gentoopm/pkgcorepm/repo.py @@ -12,7 +12,9 @@ try: except ImportError: from pkgcore.ebuild.repository import _UnconfiguredTree as UnconfiguredTree -from ..basepm.repo import PMRepository, PMRepositoryDict, PMEbuildRepository +from ..basepm.repo import (PMRepository, PMRepositoryDict, PMEbuildRepository, + GlobalUseFlag, + ) from ..util import FillMissingComparisons from .pkg import ( @@ -121,6 +123,12 @@ class PkgCoreEbuildRepo(PkgCoreRepository, PMEbuildRepository, FillMissingCompar def path(self): return self._repo.location + @property + def global_use(self) -> dict[str, GlobalUseFlag]: + return { + k: GlobalUseFlag(k, v) for _, (k, v) in self._repo.config.use_desc + } + def __lt__(self, other): return other._index < self._index
