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
 

Reply via email to