distro/package: refactor class PackageInfo into class BinaryPackage(PackageInfo)
This commit is contained in:
parent
daa7b68738
commit
dbe3dc91a3
4 changed files with 14 additions and 11 deletions
|
@ -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)
|
||||||
|
|
|
@ -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']]))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue