From cec828553d7fe8aee31d578e363ff02ff843aaf5 Mon Sep 17 00:00:00 2001 From: InsanePrawn Date: Sun, 11 Dec 2022 02:31:46 +0100 Subject: [PATCH] packages/pkgbuild: track whether pkg is built on a per-architecture basis --- packages/build.py | 6 ++++-- packages/pkgbuild.py | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/build.py b/packages/build.py index a3fcfcd..08cfe99 100644 --- a/packages/build.py +++ b/packages/build.py @@ -698,7 +698,7 @@ def build_packages( for package in need_build: base = package.pkgbase if isinstance(package, SubPkgbuild) else package assert isinstance(base, Pkgbase) - if package.is_built(): + if package.is_built(arch): logging.info(f"Skipping building {package.name} since it was already built this run as part of pkgbase {base.name}") continue build_package( @@ -711,7 +711,9 @@ def build_packages( ) files += add_package_to_repo(package, arch) updated_repos.add(package.repo) - base._is_built = True + for _arch in ['any', arch]: + if _arch in base.arches: + base._built_for.add(_arch) # rescan affected repos local_repos = get_kupfer_local(arch, in_chroot=False, scan=False) for repo_name in updated_repos: diff --git a/packages/pkgbuild.py b/packages/pkgbuild.py index 3a4b4f4..5f76b41 100644 --- a/packages/pkgbuild.py +++ b/packages/pkgbuild.py @@ -239,16 +239,16 @@ class Pkgbuild(PackageInfo): arch = 'any' return f'{self.name}-{self.version}-{arch}.pkg.tar.zst' - def is_built(self) -> bool: + def is_built(self, arch: Arch, tolerate_archless: bool = True) -> bool: raise NotImplementedError() class Pkgbase(Pkgbuild): subpackages: list[SubPkgbuild] - _is_built: bool + _built_for: set[Arch] def __init__(self, relative_path: str, subpackages: list[SubPkgbuild] = [], **args): - self._is_built = False + self._built_for = set() self.subpackages = list(subpackages) super().__init__(relative_path, **args) @@ -256,7 +256,7 @@ class Pkgbase(Pkgbuild): if not isinstance(pkg, Pkgbase): raise Exception(f"Tried to update pkgbase {self.name} with non-base pkg {pkg}") Pkgbuild.update(self, pkg) - self._is_built = pkg._is_built or self._is_built + self._built_for.update(pkg._built_for) sub_dict = {p.name: p for p in self.subpackages} self.subpackages.clear() for new_pkg in pkg.subpackages: @@ -290,8 +290,11 @@ class Pkgbase(Pkgbuild): names.update(pkg.names()) return list(names) - def is_built(self) -> bool: - return self._is_built + def is_built(self, arch: Arch, tolerate_archless: bool = True) -> bool: + arches = {arch} + if tolerate_archless: + arches.add('any') + return bool(self._built_for.intersection(arches)) class SubPkgbuild(Pkgbuild): @@ -313,8 +316,8 @@ class SubPkgbuild(Pkgbuild): assert self.pkgbase self.pkgbase.refresh_sources(lazy=lazy) - def is_built(self) -> bool: - return self.pkgbase.is_built() + def is_built(self, arch: Arch, tolerate_archless: bool = True) -> bool: + return self.pkgbase.is_built(arch) def parse_pkgbuild(