packages.discover_packages(): don't use chroot for running makepkg --printsrcinfo
, pass config, cache results
This commit is contained in:
parent
a6129a82bd
commit
7fcd68ced9
2 changed files with 26 additions and 11 deletions
|
@ -100,7 +100,14 @@ def init_prebuilts(arch: Arch, dir: str = None):
|
||||||
raise Exception(f'Failed to create local repo {repo}')
|
raise Exception(f'Failed to create local repo {repo}')
|
||||||
|
|
||||||
|
|
||||||
def discover_packages(parallel: bool = True) -> dict[str, Pkgbuild]:
|
_pkgbuilds_discovered = dict[str, Pkgbuild]()
|
||||||
|
|
||||||
|
|
||||||
|
def discover_packages(parallel: bool = True, lazy: bool = True) -> dict[str, Pkgbuild]:
|
||||||
|
global _pkgbuilds_discovered
|
||||||
|
if lazy and _pkgbuilds_discovered:
|
||||||
|
logging.debug("Reusing cached pkgbuilds repo")
|
||||||
|
return _pkgbuilds_discovered.copy()
|
||||||
pkgbuilds_dir = config.get_path('pkgbuilds')
|
pkgbuilds_dir = config.get_path('pkgbuilds')
|
||||||
packages: dict[str, Pkgbuild] = {}
|
packages: dict[str, Pkgbuild] = {}
|
||||||
paths = []
|
paths = []
|
||||||
|
@ -109,15 +116,15 @@ def discover_packages(parallel: bool = True) -> dict[str, Pkgbuild]:
|
||||||
for dir in os.listdir(os.path.join(pkgbuilds_dir, repo)):
|
for dir in os.listdir(os.path.join(pkgbuilds_dir, repo)):
|
||||||
paths.append(os.path.join(repo, dir))
|
paths.append(os.path.join(repo, dir))
|
||||||
|
|
||||||
native_chroot = setup_build_chroot(config.runtime['arch'], add_kupfer_repos=False)
|
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
logging.info("Parsing PKGBUILDs")
|
logging.info("Parsing PKGBUILDs")
|
||||||
|
|
||||||
|
logging.debug(f"About to parse pkgbuilds. verbosity: {config.runtime['verbose']}")
|
||||||
if parallel:
|
if parallel:
|
||||||
chunks = (Parallel(n_jobs=multiprocessing.cpu_count() * 4)(delayed(parse_pkgbuild)(path, native_chroot) for path in paths))
|
chunks = (Parallel(n_jobs=multiprocessing.cpu_count() * 4)(delayed(parse_pkgbuild)(path, config) for path in paths))
|
||||||
else:
|
else:
|
||||||
chunks = (parse_pkgbuild(path, native_chroot) for path in paths)
|
chunks = (parse_pkgbuild(path, config) for path in paths)
|
||||||
|
|
||||||
for pkglist in chunks:
|
for pkglist in chunks:
|
||||||
results += pkglist
|
results += pkglist
|
||||||
|
@ -145,6 +152,7 @@ def discover_packages(parallel: bool = True) -> dict[str, Pkgbuild]:
|
||||||
logging.debug(f'Removing {dep} from dependencies')
|
logging.debug(f'Removing {dep} from dependencies')
|
||||||
package.local_depends.remove(dep)
|
package.local_depends.remove(dep)
|
||||||
|
|
||||||
|
_pkgbuilds_discovered = packages.copy()
|
||||||
return packages
|
return packages
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from . import logging
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from typing import Optional, Sequence
|
from typing import Optional, Sequence
|
||||||
|
|
||||||
from chroot import Chroot
|
from config import ConfigStateHolder
|
||||||
from constants import Arch, CHROOT_PATHS, MAKEPKG_CMD
|
from exec import run_cmd
|
||||||
|
from constants import Arch, MAKEPKG_CMD
|
||||||
from distro.package import PackageInfo
|
from distro.package import PackageInfo
|
||||||
|
from logger import logging, setup_logging
|
||||||
|
|
||||||
|
|
||||||
class Pkgbuild(PackageInfo):
|
class Pkgbuild(PackageInfo):
|
||||||
|
@ -91,8 +92,14 @@ class SubPkgbuild(Pkgbuild):
|
||||||
self.pkgrel = pkgbase.pkgrel
|
self.pkgrel = pkgbase.pkgrel
|
||||||
|
|
||||||
|
|
||||||
def parse_pkgbuild(relative_pkg_dir: str, native_chroot: Chroot) -> Sequence[Pkgbuild]:
|
def parse_pkgbuild(relative_pkg_dir: str, config: ConfigStateHolder) -> Sequence[Pkgbuild]:
|
||||||
filename = os.path.join(native_chroot.get_path(CHROOT_PATHS['pkgbuilds']), relative_pkg_dir, 'PKGBUILD')
|
"""
|
||||||
|
Since function may run in a different subprocess, we need to be passed the config via parameter
|
||||||
|
"""
|
||||||
|
setup_logging(verbose=config.runtime['verbose'], log_setup=False) # different thread needs log setup.
|
||||||
|
pkgbuilds_dir = config.get_path('pkgbuilds')
|
||||||
|
pkgdir = os.path.join(pkgbuilds_dir, relative_pkg_dir)
|
||||||
|
filename = os.path.join(pkgdir, 'PKGBUILD')
|
||||||
logging.debug(f"Parsing {filename}")
|
logging.debug(f"Parsing {filename}")
|
||||||
mode = None
|
mode = None
|
||||||
with open(filename, 'r') as file:
|
with open(filename, 'r') as file:
|
||||||
|
@ -107,9 +114,9 @@ def parse_pkgbuild(relative_pkg_dir: str, native_chroot: Chroot) -> Sequence[Pkg
|
||||||
base_package = Pkgbase(relative_pkg_dir)
|
base_package = Pkgbase(relative_pkg_dir)
|
||||||
base_package.mode = mode
|
base_package.mode = mode
|
||||||
base_package.repo = relative_pkg_dir.split('/')[0]
|
base_package.repo = relative_pkg_dir.split('/')[0]
|
||||||
srcinfo = native_chroot.run_cmd(
|
srcinfo = run_cmd(
|
||||||
MAKEPKG_CMD + ['--printsrcinfo'],
|
MAKEPKG_CMD + ['--printsrcinfo'],
|
||||||
cwd=os.path.join(CHROOT_PATHS['pkgbuilds'], base_package.path),
|
cwd=pkgdir,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
)
|
)
|
||||||
assert (isinstance(srcinfo, subprocess.CompletedProcess))
|
assert (isinstance(srcinfo, subprocess.CompletedProcess))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue