From b88deada94cd78ff0b85e75ebabd9cad4c9699c3 Mon Sep 17 00:00:00 2001 From: KunoiSayami Date: Mon, 31 Oct 2022 04:01:33 +0800 Subject: feat(script): Add debug script Signed-off-by: KunoiSayami --- utils/pkgbuild.py | 49 ++++++++++++++++++++++++++++++++----------------- utils/pkgman.py | 42 ++++++++++++++++++++++++++++++++++++++++++ utils/upload.py | 2 +- 3 files changed, 75 insertions(+), 18 deletions(-) create mode 100755 utils/pkgman.py diff --git a/utils/pkgbuild.py b/utils/pkgbuild.py index 89be962..73b4679 100755 --- a/utils/pkgbuild.py +++ b/utils/pkgbuild.py @@ -39,20 +39,27 @@ ARCH = asyncio.run(get_arch()) @dataclasses.dataclass class PackageVersionWithPath: - _version: PackageVersion + pkg_version: PackageVersion path: pathlib.Path + # For debug use + spend_time: float @property def name(self) -> str: - return self._version.name + return self.pkg_version.name @property def version(self) -> str: - return self._version.version + return self.pkg_version.version @property def arch(self) -> bool: - return self._version.arch_match + return self.pkg_version.arch_match + + def __str__(self) -> str: + if self.spend_time < 0: + return self.pkg_version.__str__() + return f"{self.pkg_version.__str__()} (spend: {self.spend_time:.2f}s)" @dataclasses.dataclass @@ -173,29 +180,22 @@ async def parse_srcinfo(path: pathlib.PurePath) -> PackageVersionWithPath: if (src_path := pathlib.Path(path.joinpath(".SRCINFO"))).is_file(): async with aiofiles.open(str(src_path)) as fin: info = get_src_info(await fin.read()) + spend_time = -1.0 else: + start_time = time.time() p = await asyncio.create_subprocess_exec( "makepkg", "--printsrcinfo", cwd=src_path.parent, stdout=subprocess.PIPE ) (stdout, stderr) = await p.communicate() info = get_src_info(stdout.decode()) - return PackageVersionWithPath(info, pathlib.Path(path).resolve()) + spend_time = time.time() - start_time + return PackageVersionWithPath(info, pathlib.Path(path).resolve(), spend_time) -async def get_build_target( - pkg_db: str, - home_directory: pathlib.Path, - build_target: list[str] | None, - build_all: bool, -) -> list[PackageVersionWithPath]: - - repo = fetch_database(pkg_db) +async def fetch_packages_from_directory(repo_directory: pathlib.Path) -> set[asyncio.Task[PackageVersionWithPath]]: tasks = [] - pending_build = [] - - repo_directory = home_directory.joinpath(PKGBUILD_DIRECTORY_BASE) - for folder in os.listdir(PKGBUILD_DIRECTORY_BASE): + for folder in os.listdir(str(repo_directory)): if folder.startswith("."): continue @@ -205,6 +205,21 @@ async def get_build_target( tasks.append(asyncio.create_task(parse_srcinfo(pkg_dir))) finished, _ = await asyncio.wait(tasks, return_when=asyncio.ALL_COMPLETED) + return finished + + +async def get_build_target( + pkg_db: str, + home_directory: pathlib.Path, + build_target: list[str] | None, + build_all: bool, +) -> list[PackageVersionWithPath]: + + repo = fetch_database(pkg_db) + pending_build = [] + + finished = await fetch_packages_from_directory(home_directory.joinpath(PKGBUILD_DIRECTORY_BASE)) + if len(BUILD_OVERRIDE): logger.warning("BUILD OVERRIDE: %s", BUILD_OVERRIDE) diff --git a/utils/pkgman.py b/utils/pkgman.py new file mode 100755 index 0000000..b59ad73 --- /dev/null +++ b/utils/pkgman.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +import argparse +import asyncio +import os +import pathlib + +try: + import pkgbuild +except ModuleNotFoundError: + import utils.pkgbuild as pkgbuild + + +async def fetch_and_get(_remote_addr: str): + raise NotImplementedError("TODO!") + + +async def main(args: argparse.Namespace): + if args.sub == "show": + print(pkgbuild.fetch_database(args.database)) + elif args.sub == "show_local": + pkg_dir = pathlib.Path(os.getcwd()).joinpath(args.path).resolve() + for packages in await pkgbuild.fetch_packages_from_directory(pkg_dir): + print(packages.result()) + elif args.sub == "show_internet": + await fetch_and_get(args.database) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser('pkgman.py') + sub = parser.add_subparsers(title="subcommand", dest="sub") + decmp_parser = sub.add_parser("show", description="Show databases") + decmp_parser.add_argument("database") + + local_show_parser = sub.add_parser("show_local") + local_show_parser.add_argument("path", default="./repo") + + decmp_online_parser = sub.add_parser("show_internet", description="Show remote databases") + decmp_online_parser.add_argument("database") + + args_ = parser.parse_args() + asyncio.run(main(args_)) + diff --git a/utils/upload.py b/utils/upload.py index c027bed..35fe002 100755 --- a/utils/upload.py +++ b/utils/upload.py @@ -31,7 +31,7 @@ async def send_file( data.add_field("token", args.token) data.add_field("arch", args.arch) async with session.post(args.remote_address, data=data) as req: - logger.info("%s", await req.text()) + logger.debug("%s", await req.text()) async def main(args: argparse.Namespace) -> int: -- cgit v1.3.1