commit: d3387bec035cd0ff15298893cbab3e756611a122
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Jan 18 13:26:22 2023 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Jan 18 13:26:22 2023 +0000
URL: https://gitweb.gentoo.org/proj/gentoopm.git/commit/?id=d3387bec
repo: Support getting license groups
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
gentoopm/basepm/repo.py | 33 +++++++++++++++++++++++++++++++++
gentoopm/basepm/stack.py | 10 +++++++++-
2 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/gentoopm/basepm/repo.py b/gentoopm/basepm/repo.py
index d10e81e..98d39ed 100644
--- a/gentoopm/basepm/repo.py
+++ b/gentoopm/basepm/repo.py
@@ -120,6 +120,14 @@ class LicenseDesc(typing.NamedTuple):
name: str
+class LicenseGroup(typing.NamedTuple):
+ """License group"""
+
+ name: str
+ nested_groups: list[str]
+ licenses: list[str]
+
+
class PMEbuildRepository(PMRepository, FillMissingComparisons):
"""
Base abstract class for an ebuild repository (on livefs).
@@ -230,6 +238,31 @@ class PMEbuildRepository(PMRepository,
FillMissingComparisons):
except FileNotFoundError:
return {}
+ @property
+ def license_groups(self) -> dict[str, LicenseGroup]:
+ """Get dict of license groups"""
+ def inner(f: typing.IO[str],
+ ) -> typing.Generator[tuple[str, LicenseGroup], None, None]:
+ for line in f:
+ line = line.strip()
+ if not line or line[0] == "#":
+ continue
+
+ group, *members = line.split()
+ yield (group,
+ LicenseGroup(name=group,
+ nested_groups=[member[1:] for member
+ in members
+ if member.startswith("@")],
+ licenses=[member for member in members
+ if not member.startswith("@")]))
+
+ try:
+ with open(Path(self.path) / "profiles/license_groups", "r") as f:
+ return dict(inner(f))
+ except FileNotFoundError:
+ return {}
+
@abstractmethod
def __lt__(self, other):
pass
diff --git a/gentoopm/basepm/stack.py b/gentoopm/basepm/stack.py
index 864af37..29bb345 100644
--- a/gentoopm/basepm/stack.py
+++ b/gentoopm/basepm/stack.py
@@ -4,7 +4,7 @@
# Released under the terms of the 2-clause BSD license.
from .repo import (PMRepository, GlobalUseFlag, UseExpand, ArchDesc,
- LicenseDesc,
+ LicenseDesc, LicenseGroup,
)
from .pkgset import PMPackageSet
@@ -57,6 +57,14 @@ class PMRepoStackWrapper(PMRepository):
ret.update(r.licenses)
return ret
+ @property
+ def license_groups(self) -> dict[str, LicenseGroup]:
+ """Get dict of license groups"""
+ ret = {}
+ for r in self._repos:
+ ret.update(r.license_groups)
+ return ret
+
class PMFilteredStackPackageSet(PMPackageSet):
"""