aboutsummaryrefslogtreecommitdiff
path: root/utils/pkgman.py
blob: 0e7388ff1bf887f4b7ca639a3650a305ee224c7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/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 show_diff(database: str, path: str) -> None:
    pkg_dir = pathlib.Path(os.getcwd()).joinpath(path).resolve()
    database_result = pkgbuild.fetch_database(database)
    pending = []
    for package in await pkgbuild.fetch_packages_from_directory(pkg_dir):
        if (package := package.result()).name in database_result:
            if database_result[package.name] < package.version:
                pending.append(package)
        else:
            pending.append(package)
    for package in pending:
        print(package.name, package.version)


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 package in await pkgbuild.fetch_packages_from_directory(pkg_dir):
            print(package.result())
    elif args.sub == "show_internet":
        await fetch_and_get(args.database)
    elif args.sub == 'diff':
        await show_diff(args.database, args.path)


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")

    show_diff_parser = sub.add_parser("diff")
    show_diff_parser.add_argument("database")
    show_diff_parser.add_argument("path")

    args_ = parser.parse_args()
    asyncio.run(main(args_))