aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rwxr-xr-xutils/pkgbuild.py49
-rwxr-xr-xutils/pkgman.py42
-rwxr-xr-xutils/upload.py2
3 files changed, 75 insertions, 18 deletions
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: