distro/package: refactor class PackageInfo into class BinaryPackage(PackageInfo)

This commit is contained in:
InsanePrawn 2022-08-31 15:36:21 +02:00
parent daa7b68738
commit dbe3dc91a3
4 changed files with 14 additions and 11 deletions

View file

@ -4,7 +4,7 @@ from constants import Arch, ARCHES, BASE_DISTROS, REPOSITORIES, KUPFER_HTTPS, CH
from generator import generate_pacman_conf_body from generator import generate_pacman_conf_body
from config import config from config import config
from .package import PackageInfo from .package import BinaryPackage
from .repo import RepoInfo, Repo from .repo import RepoInfo, Repo
@ -25,9 +25,9 @@ class Distro:
scan=scan, scan=scan,
) )
def get_packages(self) -> dict[str, PackageInfo]: def get_packages(self) -> dict[str, BinaryPackage]:
""" get packages from all repos, semantically overlaying them""" """ get packages from all repos, semantically overlaying them"""
results = dict[str, PackageInfo]() results = dict[str, BinaryPackage]()
for repo in list(self.repos.values())[::-1]: for repo in list(self.repos.values())[::-1]:
assert repo.packages is not None assert repo.packages is not None
results.update(repo.packages) results.update(repo.packages)

View file

@ -4,6 +4,9 @@ from typing import Optional
class PackageInfo: class PackageInfo:
name: str name: str
version: str version: str
class BinaryPackage(PackageInfo):
filename: str filename: str
resolved_url: Optional[str] resolved_url: Optional[str]
@ -22,12 +25,12 @@ class PackageInfo:
def __repr__(self): def __repr__(self):
return f'{self.name}@{self.version}' return f'{self.name}@{self.version}'
@staticmethod @classmethod
def parse_desc(desc_str: str, resolved_repo_url=None): def parse_desc(clss, desc_str: str, resolved_repo_url=None):
"""Parses a desc file, returning a PackageInfo""" """Parses a desc file, returning a PackageInfo"""
pruned_lines = ([line.strip() for line in desc_str.split('%') if line.strip()]) pruned_lines = ([line.strip() for line in desc_str.split('%') if line.strip()])
desc = {} desc = {}
for key, value in zip(pruned_lines[0::2], pruned_lines[1::2]): for key, value in zip(pruned_lines[0::2], pruned_lines[1::2]):
desc[key.strip()] = value.strip() desc[key.strip()] = value.strip()
return PackageInfo(desc['NAME'], desc['VERSION'], desc['FILENAME'], resolved_url='/'.join([resolved_repo_url, desc['FILENAME']])) return clss(desc['NAME'], desc['VERSION'], desc['FILENAME'], resolved_url='/'.join([resolved_repo_url, desc['FILENAME']]))

View file

@ -5,7 +5,7 @@ import tarfile
import tempfile import tempfile
import urllib.request import urllib.request
from .package import PackageInfo from .package import BinaryPackage
def resolve_url(url_template, repo_name: str, arch: str): def resolve_url(url_template, repo_name: str, arch: str):
@ -28,7 +28,7 @@ class Repo(RepoInfo):
name: str name: str
resolved_url: str resolved_url: str
arch: str arch: str
packages: dict[str, PackageInfo] packages: dict[str, BinaryPackage]
remote: bool remote: bool
scanned: bool = False scanned: bool = False
@ -53,7 +53,7 @@ class Repo(RepoInfo):
for node in index.getmembers(): for node in index.getmembers():
if os.path.basename(node.name) == 'desc': if os.path.basename(node.name) == 'desc':
logging.debug(f'Parsing desc file for {os.path.dirname(node.name)}') logging.debug(f'Parsing desc file for {os.path.dirname(node.name)}')
pkg = PackageInfo.parse_desc(index.extractfile(node).read().decode(), self.resolved_url) pkg = BinaryPackage.parse_desc(index.extractfile(node).read().decode(), self.resolved_url)
self.packages[pkg.name] = pkg self.packages[pkg.name] = pkg
self.scanned = True self.scanned = True

View file

@ -16,7 +16,7 @@ from config import config
from exec.cmd import run_cmd, run_root_cmd from exec.cmd import run_cmd, run_root_cmd
from exec.file import makedir, remove_file from exec.file import makedir, remove_file
from chroot.build import get_build_chroot, BuildChroot from chroot.build import get_build_chroot, BuildChroot
from distro.distro import PackageInfo, get_kupfer_https, get_kupfer_local from distro.distro import BinaryPackage, get_kupfer_https, get_kupfer_local
from wrapper import check_programs_wrap, wrap_if_foreign_arch from wrapper import check_programs_wrap, wrap_if_foreign_arch
from .pkgbuild import discover_pkgbuilds, filter_pkgbuilds, Pkgbuild from .pkgbuild import discover_pkgbuilds, filter_pkgbuilds, Pkgbuild
@ -275,7 +275,7 @@ def try_download_package(dest_file_path: str, package: Pkgbuild, arch: Arch) ->
if pkgname not in repo.packages: if pkgname not in repo.packages:
logging.warning(f"Package {pkgname} not found in remote repos, building instead.") logging.warning(f"Package {pkgname} not found in remote repos, building instead.")
return False return False
repo_pkg: PackageInfo = repo.packages[pkgname] repo_pkg: BinaryPackage = repo.packages[pkgname]
if repo_pkg.version != package.version: if repo_pkg.version != package.version:
logging.debug(f"Package {pkgname} versions differ: local: {package.version}, remote: {repo_pkg.version}. Building instead.") logging.debug(f"Package {pkgname} versions differ: local: {package.version}, remote: {repo_pkg.version}. Building instead.")
return False return False