packages/pkgbuild: parse _nodeps and cache in srcinfo_cache

This commit is contained in:
InsanePrawn 2022-09-20 18:36:06 +02:00
parent cac150d11b
commit 6ddab50e21
2 changed files with 25 additions and 6 deletions

View file

@ -69,6 +69,7 @@ class Pkgbuild(PackageInfo):
local_depends: list[str] local_depends: list[str]
repo: str repo: str
mode: str mode: str
nodeps: bool
path: str path: str
pkgver: str pkgver: str
pkgrel: str pkgrel: str
@ -100,6 +101,7 @@ class Pkgbuild(PackageInfo):
self.local_depends = [] self.local_depends = []
self.repo = repo or '' self.repo = repo or ''
self.mode = '' self.mode = ''
self.nodeps = False
self.path = relative_path self.path = relative_path
self.pkgver = '' self.pkgver = ''
self.pkgrel = '' self.pkgrel = ''
@ -131,6 +133,7 @@ class Pkgbuild(PackageInfo):
self.local_depends = list(pkg.local_depends) self.local_depends = list(pkg.local_depends)
self.repo = pkg.repo self.repo = pkg.repo
self.mode = pkg.mode self.mode = pkg.mode
self.nodeps = pkg.nodeps
self.path = pkg.path self.path = pkg.path
self.pkgver = pkg.pkgver self.pkgver = pkg.pkgver
self.pkgrel = pkg.pkgrel self.pkgrel = pkg.pkgrel
@ -230,6 +233,8 @@ def parse_pkgbuild(
assert lines and srcinfo_cache assert lines and srcinfo_cache
assert 'build_mode' in srcinfo_cache assert 'build_mode' in srcinfo_cache
mode = srcinfo_cache.build_mode mode = srcinfo_cache.build_mode
assert 'build_nodeps' in srcinfo_cache
nodeps = srcinfo_cache.build_nodeps
if mode not in ['host', 'cross']: if mode not in ['host', 'cross']:
err = 'an invalid' if mode is not None else 'no' err = 'an invalid' if mode is not None else 'no'
err_end = f": {repr(mode)}" if mode is not None else "." 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 = Pkgbase(relative_pkg_dir, sources_refreshed=sources_refreshed, srcinfo_cache=srcinfo_cache)
base_package.mode = mode base_package.mode = mode
base_package.nodeps = nodeps
base_package.repo = relative_pkg_dir.split('/')[0] base_package.repo = relative_pkg_dir.split('/')[0]
current: Pkgbuild = base_package current: Pkgbuild = base_package
@ -425,6 +431,5 @@ def filter_pkgbuilds(
result += [pkg] result += [pkg]
if not allow_empty_results and not result: if not allow_empty_results and not result:
raise Exception(f'No packages matched by {fields_err}: ' + ', '.join([f'"{p}"' for p in paths])) raise Exception(f'No packages matched by {fields_err}: ' + ', '.join([f'"{p}"' for p in paths]))
return result return result

View file

@ -20,6 +20,7 @@ class SrcinfoMetaFile(DataClass):
checksums: dict[str, str] checksums: dict[str, str]
build_mode: Optional[str] build_mode: Optional[str]
build_nodeps: Optional[bool]
src_initialised: Optional[str] src_initialised: Optional[str]
_relative_path: str _relative_path: str
@ -47,6 +48,7 @@ class SrcinfoMetaFile(DataClass):
'_relative_path': relative_pkg_dir, '_relative_path': relative_pkg_dir,
'_changed': True, '_changed': True,
'build_mode': '', 'build_mode': '',
'build_nodeps': None,
'checksums': {}, 'checksums': {},
'src_initialised': None, 'src_initialised': None,
}) })
@ -74,6 +76,10 @@ class SrcinfoMetaFile(DataClass):
if not force_refresh: if not force_refresh:
logging.debug(f'{metadata._relative_path}: srcinfo checksums match!') logging.debug(f'{metadata._relative_path}: srcinfo checksums match!')
lines = lines or metadata.read_srcinfo_file() 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: else:
lines = metadata.refresh_all(write=write) lines = metadata.refresh_all(write=write)
return metadata, lines return metadata, lines
@ -92,14 +98,22 @@ class SrcinfoMetaFile(DataClass):
if checksums != checksums_old: if checksums != checksums_old:
self._changed = True self._changed = True
def refresh_build_mode(self): def refresh_build_fields(self):
self['build_mode'] = None self['build_mode'] = None
self['build_nodeps'] = None
with open(os.path.join(config.get_path('pkgbuilds'), self._relative_path, 'PKGBUILD'), 'r') as file: with open(os.path.join(config.get_path('pkgbuilds'), self._relative_path, 'PKGBUILD'), 'r') as file:
lines = file.read().split('\n') lines = file.read().split('\n')
for line in lines: for line in lines:
if line.startswith('_mode='): if not line.startswith('_') or '=' not in line:
self.build_mode = line.split('=', 1)[1].strip("\"'") continue
return 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]: def refresh_srcinfo(self) -> list[str]:
'Run `makepkg --printsrcinfo` to create an updated SRCINFO file and return the lines from it' '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]: def refresh_all(self, write: bool = True) -> list[str]:
lines = self.refresh_srcinfo() lines = self.refresh_srcinfo()
self.refresh_checksums() self.refresh_checksums()
self.refresh_build_mode() self.refresh_build_fields()
if write: if write:
self.write() self.write()
return lines return lines