From b2112026d26ff66c4e6b1f0e0533ac328dd3bd97 Mon Sep 17 00:00:00 2001 From: InsanePrawn Date: Fri, 7 Oct 2022 05:31:15 +0200 Subject: [PATCH] packages/build: skip packages that were already built this run (e.g. split packages) --- packages/build.py | 8 +++++++- packages/pkgbuild.py | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/build.py b/packages/build.py index 3a92de3..9bda88a 100644 --- a/packages/build.py +++ b/packages/build.py @@ -18,7 +18,7 @@ from distro.distro import get_kupfer_https, get_kupfer_local from distro.package import RemotePackage from wrapper import check_programs_wrap, is_wrapped -from .pkgbuild import discover_pkgbuilds, filter_pkgbuilds, Pkgbuild, SubPkgbuild +from .pkgbuild import discover_pkgbuilds, filter_pkgbuilds, Pkgbase, Pkgbuild, SubPkgbuild pacman_cmd = [ 'pacman', @@ -628,6 +628,11 @@ def build_packages( for level, need_build in enumerate(build_levels): logging.info(f"(Level {level}) Building {', '.join([x.name for x in need_build])}") for package in need_build: + base = package.pkgbase if isinstance(package, SubPkgbuild) else package + assert isinstance(base, Pkgbase) + if package.is_built(): + logging.info(f"Skipping building {package.name} since it was already built this run as part of pkgbase {base.name}") + continue build_package( package, arch=arch, @@ -637,6 +642,7 @@ def build_packages( clean_chroot=clean_chroot, ) files += add_package_to_repo(package, arch) + base._is_built = True return files diff --git a/packages/pkgbuild.py b/packages/pkgbuild.py index 3d09f52..30c31d1 100644 --- a/packages/pkgbuild.py +++ b/packages/pkgbuild.py @@ -184,11 +184,16 @@ class Pkgbuild(PackageInfo): arch = 'any' return f'{self.name}-{self.version}-{arch}.pkg.tar.zst' + def is_built(self) -> bool: + raise NotImplementedError() + class Pkgbase(Pkgbuild): subpackages: list[SubPkgbuild] + _is_built: bool def __init__(self, relative_path: str, subpackages: list[SubPkgbuild] = [], **args): + self._is_built = False self.subpackages = list(subpackages) super().__init__(relative_path, **args) @@ -196,6 +201,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 sub_dict = {p.name: p for p in self.subpackages} self.subpackages.clear() for new_pkg in pkg.subpackages: @@ -229,6 +235,9 @@ class Pkgbase(Pkgbuild): names.update(pkg.names()) return list(names) + def is_built(self) -> bool: + return self._is_built + class SubPkgbuild(Pkgbuild): pkgbase: Pkgbase @@ -249,6 +258,9 @@ class SubPkgbuild(Pkgbuild): assert self.pkgbase self.pkgbase.refresh_sources(lazy=lazy) + def is_built(self) -> bool: + return self.pkgbase.is_built() + def parse_pkgbuild( relative_pkg_dir: str,