From 6ddab50e21e0071e9f562c625833d02470f23eb4 Mon Sep 17 00:00:00 2001 From: InsanePrawn Date: Tue, 20 Sep 2022 18:36:06 +0200 Subject: [PATCH] packages/pkgbuild: parse _nodeps and cache in srcinfo_cache --- packages/pkgbuild.py | 7 ++++++- packages/srcinfo_cache.py | 24 +++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/pkgbuild.py b/packages/pkgbuild.py index 08348ba..84aac8e 100644 --- a/packages/pkgbuild.py +++ b/packages/pkgbuild.py @@ -69,6 +69,7 @@ class Pkgbuild(PackageInfo): local_depends: list[str] repo: str mode: str + nodeps: bool path: str pkgver: str pkgrel: str @@ -100,6 +101,7 @@ class Pkgbuild(PackageInfo): self.local_depends = [] self.repo = repo or '' self.mode = '' + self.nodeps = False self.path = relative_path self.pkgver = '' self.pkgrel = '' @@ -131,6 +133,7 @@ class Pkgbuild(PackageInfo): self.local_depends = list(pkg.local_depends) self.repo = pkg.repo self.mode = pkg.mode + self.nodeps = pkg.nodeps self.path = pkg.path self.pkgver = pkg.pkgver self.pkgrel = pkg.pkgrel @@ -230,6 +233,8 @@ def parse_pkgbuild( assert lines and srcinfo_cache assert 'build_mode' in srcinfo_cache mode = srcinfo_cache.build_mode + assert 'build_nodeps' in srcinfo_cache + nodeps = srcinfo_cache.build_nodeps if mode not in ['host', 'cross']: err = 'an invalid' if mode is not None else 'no' err_end = f": {repr(mode)}" if mode is not None else "." @@ -237,6 +242,7 @@ def parse_pkgbuild( base_package = Pkgbase(relative_pkg_dir, sources_refreshed=sources_refreshed, srcinfo_cache=srcinfo_cache) base_package.mode = mode + base_package.nodeps = nodeps base_package.repo = relative_pkg_dir.split('/')[0] current: Pkgbuild = base_package @@ -425,6 +431,5 @@ def filter_pkgbuilds( result += [pkg] if not allow_empty_results and not result: - raise Exception(f'No packages matched by {fields_err}: ' + ', '.join([f'"{p}"' for p in paths])) return result diff --git a/packages/srcinfo_cache.py b/packages/srcinfo_cache.py index 2afd0f6..7f4df34 100644 --- a/packages/srcinfo_cache.py +++ b/packages/srcinfo_cache.py @@ -20,6 +20,7 @@ class SrcinfoMetaFile(DataClass): checksums: dict[str, str] build_mode: Optional[str] + build_nodeps: Optional[bool] src_initialised: Optional[str] _relative_path: str @@ -47,6 +48,7 @@ class SrcinfoMetaFile(DataClass): '_relative_path': relative_pkg_dir, '_changed': True, 'build_mode': '', + 'build_nodeps': None, 'checksums': {}, 'src_initialised': None, }) @@ -74,6 +76,10 @@ class SrcinfoMetaFile(DataClass): if not force_refresh: logging.debug(f'{metadata._relative_path}: srcinfo checksums match!') lines = lines or metadata.read_srcinfo_file() + for build_field in ['build_mode', 'build_nodeps']: + if build_field not in metadata: + metadata.refresh_build_fields() + break else: lines = metadata.refresh_all(write=write) return metadata, lines @@ -92,14 +98,22 @@ class SrcinfoMetaFile(DataClass): if checksums != checksums_old: self._changed = True - def refresh_build_mode(self): + def refresh_build_fields(self): self['build_mode'] = None + self['build_nodeps'] = None with open(os.path.join(config.get_path('pkgbuilds'), self._relative_path, 'PKGBUILD'), 'r') as file: lines = file.read().split('\n') for line in lines: - if line.startswith('_mode='): - self.build_mode = line.split('=', 1)[1].strip("\"'") - return + if not line.startswith('_') or '=' not in line: + continue + key, val = line.split('=', 1) + val = val.strip("\"'") + if key == '_mode': + self.build_mode = val + elif key == '_nodeps': + self.build_nodeps = val.lower() == 'true' + else: + continue def refresh_srcinfo(self) -> list[str]: 'Run `makepkg --printsrcinfo` to create an updated SRCINFO file and return the lines from it' @@ -127,7 +141,7 @@ class SrcinfoMetaFile(DataClass): def refresh_all(self, write: bool = True) -> list[str]: lines = self.refresh_srcinfo() self.refresh_checksums() - self.refresh_build_mode() + self.refresh_build_fields() if write: self.write() return lines