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 config import config
from .package import PackageInfo
from .package import BinaryPackage
from .repo import RepoInfo, Repo
@ -25,9 +25,9 @@ class Distro:
scan=scan,
)
def get_packages(self) -> dict[str, PackageInfo]:
def get_packages(self) -> dict[str, BinaryPackage]:
""" get packages from all repos, semantically overlaying them"""
results = dict[str, PackageInfo]()
results = dict[str, BinaryPackage]()
for repo in list(self.repos.values())[::-1]:
assert repo.packages is not None
results.update(repo.packages)

View file

@ -4,6 +4,9 @@ from typing import Optional
class PackageInfo:
name: str
version: str
class BinaryPackage(PackageInfo):
filename: str
resolved_url: Optional[str]
@ -22,12 +25,12 @@ class PackageInfo:
def __repr__(self):
return f'{self.name}@{self.version}'
@staticmethod
def parse_desc(desc_str: str, resolved_repo_url=None):
@classmethod
def parse_desc(clss, desc_str: str, resolved_repo_url=None):
"""Parses a desc file, returning a PackageInfo"""
pruned_lines = ([line.strip() for line in desc_str.split('%') if line.strip()])
desc = {}
for key, value in zip(pruned_lines[0::2], pruned_lines[1::2]):
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 urllib.request
from .package import PackageInfo
from .package import BinaryPackage
def resolve_url(url_template, repo_name: str, arch: str):
@ -28,7 +28,7 @@ class Repo(RepoInfo):
name: str
resolved_url: str
arch: str
packages: dict[str, PackageInfo]
packages: dict[str, BinaryPackage]
remote: bool
scanned: bool = False
@ -53,7 +53,7 @@ class Repo(RepoInfo):
for node in index.getmembers():
if os.path.basename(node.name) == 'desc':
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.scanned = True

View file

@ -16,7 +16,7 @@ from config import config
from exec.cmd import run_cmd, run_root_cmd
from exec.file import makedir, remove_file
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 .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:
logging.warning(f"Package {pkgname} not found in remote repos, building instead.")
return False
repo_pkg: PackageInfo = repo.packages[pkgname]
repo_pkg: BinaryPackage = repo.packages[pkgname]
if repo_pkg.version != package.version:
logging.debug(f"Package {pkgname} versions differ: local: {package.version}, remote: {repo_pkg.version}. Building instead.")
return False