50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
import logging
|
|
import os
|
|
import pathlib
|
|
import subprocess
|
|
|
|
from packaging.version import LegacyVersion
|
|
from srcinfo.parse import parse_srcinfo
|
|
|
|
|
|
def import_keys(pkgbuild: str) -> bool:
|
|
parsed = parse_pkgbuild(pkgbuild)
|
|
|
|
if "validpgpkeys" in parsed:
|
|
for k in parsed["validpgpkeys"]:
|
|
s = subprocess.run(["gpg", "--keyserver", "keyserver.ubuntu.com", "--recv-keys", k],
|
|
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
logging.debug("[GPG] %s", s.stdout.decode(errors='ignore'))
|
|
if s.returncode:
|
|
logging.warning("[GPG] Import of key %s failed: %s", k, s.stdout.decode(errors="ignore"))
|
|
return False
|
|
else:
|
|
logging.info("[GPG] Imported key %s", k)
|
|
|
|
return True
|
|
|
|
|
|
def parse_pkgbuild(pkgbuild_file: str) -> dict:
|
|
pkgbuild_path = pathlib.Path(pkgbuild_file)
|
|
os.chdir(pkgbuild_path.parent)
|
|
res = subprocess.run(["makepkg", "--printsrcinfo"], check=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
|
|
if res.returncode:
|
|
logging.warning("[PKGBUILD/%s] makepkg failed: %s", pkgbuild_path.name, res.stdout.decode(errors="ignore"))
|
|
return {}
|
|
|
|
(parsed, errors) = parse_srcinfo(res.stdout.decode(errors="ignore"))
|
|
|
|
if errors:
|
|
logging.warning("[PKGBUILD/%s] Failed to parse: %s", pkgbuild_path.name, errors)
|
|
return {}
|
|
return parsed
|
|
|
|
|
|
def parse_pkgbuild_ver(pkgbuild_file: str = None, parsed: dict = None) -> LegacyVersion:
|
|
if not parsed:
|
|
parsed = parse_pkgbuild(pkgbuild_file)
|
|
if "epoch" in parsed:
|
|
return LegacyVersion("{}:{}-{}".format(parsed["epoch"], parsed["pkgver"], parsed["pkgrel"]))
|
|
return LegacyVersion("{}-{}".format(parsed["pkgver"], parsed["pkgrel"]))
|