packages/build: skip packages that were already built this run (e.g. split packages)

This commit is contained in:
InsanePrawn 2022-10-07 05:31:15 +02:00
parent ebd541e039
commit b2112026d2
2 changed files with 19 additions and 1 deletions

View file

@ -18,7 +18,7 @@ from distro.distro import get_kupfer_https, get_kupfer_local
from distro.package import RemotePackage from distro.package import RemotePackage
from wrapper import check_programs_wrap, is_wrapped 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_cmd = [
'pacman', 'pacman',
@ -628,6 +628,11 @@ def build_packages(
for level, need_build in enumerate(build_levels): for level, need_build in enumerate(build_levels):
logging.info(f"(Level {level}) Building {', '.join([x.name for x in need_build])}") logging.info(f"(Level {level}) Building {', '.join([x.name for x in need_build])}")
for package 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( build_package(
package, package,
arch=arch, arch=arch,
@ -637,6 +642,7 @@ def build_packages(
clean_chroot=clean_chroot, clean_chroot=clean_chroot,
) )
files += add_package_to_repo(package, arch) files += add_package_to_repo(package, arch)
base._is_built = True
return files return files

View file

@ -184,11 +184,16 @@ class Pkgbuild(PackageInfo):
arch = 'any' arch = 'any'
return f'{self.name}-{self.version}-{arch}.pkg.tar.zst' return f'{self.name}-{self.version}-{arch}.pkg.tar.zst'
def is_built(self) -> bool:
raise NotImplementedError()
class Pkgbase(Pkgbuild): class Pkgbase(Pkgbuild):
subpackages: list[SubPkgbuild] subpackages: list[SubPkgbuild]
_is_built: bool
def __init__(self, relative_path: str, subpackages: list[SubPkgbuild] = [], **args): def __init__(self, relative_path: str, subpackages: list[SubPkgbuild] = [], **args):
self._is_built = False
self.subpackages = list(subpackages) self.subpackages = list(subpackages)
super().__init__(relative_path, **args) super().__init__(relative_path, **args)
@ -196,6 +201,7 @@ class Pkgbase(Pkgbuild):
if not isinstance(pkg, Pkgbase): if not isinstance(pkg, Pkgbase):
raise Exception(f"Tried to update pkgbase {self.name} with non-base pkg {pkg}") raise Exception(f"Tried to update pkgbase {self.name} with non-base pkg {pkg}")
Pkgbuild.update(self, 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} sub_dict = {p.name: p for p in self.subpackages}
self.subpackages.clear() self.subpackages.clear()
for new_pkg in pkg.subpackages: for new_pkg in pkg.subpackages:
@ -229,6 +235,9 @@ class Pkgbase(Pkgbuild):
names.update(pkg.names()) names.update(pkg.names())
return list(names) return list(names)
def is_built(self) -> bool:
return self._is_built
class SubPkgbuild(Pkgbuild): class SubPkgbuild(Pkgbuild):
pkgbase: Pkgbase pkgbase: Pkgbase
@ -249,6 +258,9 @@ class SubPkgbuild(Pkgbuild):
assert self.pkgbase assert self.pkgbase
self.pkgbase.refresh_sources(lazy=lazy) self.pkgbase.refresh_sources(lazy=lazy)
def is_built(self) -> bool:
return self.pkgbase.is_built()
def parse_pkgbuild( def parse_pkgbuild(
relative_pkg_dir: str, relative_pkg_dir: str,