diff --git a/pmb/core/package_metadata.py b/pmb/core/package_metadata.py new file mode 100644 index 00000000..a19df758 --- /dev/null +++ b/pmb/core/package_metadata.py @@ -0,0 +1,44 @@ +# Copyright 2024 Stefan Hansson +# SPDX-License-Identifier: GPL-3.0-or-later +from dataclasses import dataclass +from typing import Any + +import pmb.build._package +from pmb.core.apkindex_block import ApkindexBlock +from pmb.core.context import get_context + + +@dataclass +class PackageMetadata: + # This can't be list[Arch] because it can have values like "noarch" and "!armhf" + arch: list[str] + depends: list[str] + pkgname: str + provides: list[str] + version: str + + @staticmethod + def from_apkindex_block(apkindex_block: ApkindexBlock) -> "PackageMetadata": + return PackageMetadata( + arch=[str(apkindex_block.arch)], + depends=apkindex_block.depends or [], + pkgname=apkindex_block.pkgname, + provides=apkindex_block.provides, + version=apkindex_block.version, + ) + + @staticmethod + def from_pmaport(pmaport: dict[str, Any]) -> "PackageMetadata": + pmaport_arches = pmaport["arch"] + pmaport_depends = pmb.build._package.get_depends(get_context(), pmaport) + pmaport_pkgname = pmaport["pkgname"] + pmaport_provides = pmaport["provides"] + pmaport_version = pmaport["pkgver"] + "-r" + pmaport["pkgrel"] + + return PackageMetadata( + arch=pmaport_arches, + depends=pmaport_depends or [], + pkgname=pmaport_pkgname, + provides=pmaport_provides, + version=pmaport_version, + )