cmds.distro.CmdXxx: Rename to cmds.pkg.CmdXxx
With the exception of the "info" subcommand, nearly all of distro's subcommands deal with package managing, so push them into their own command category. Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
c19111e5b6
commit
5830984bfc
17 changed files with 65 additions and 41 deletions
|
|
@ -120,7 +120,7 @@ ifeq ($(TIME),)
|
||||||
endif
|
endif
|
||||||
JW_PKG_PY_PROJECTS = $(JW_PKG_PY) projects
|
JW_PKG_PY_PROJECTS = $(JW_PKG_PY) projects
|
||||||
JW_PKG_PY_BUILD = $(JW_PKG_PY_PROJECTS) build $(JW_PKG_PY_EXTRA_BUILD_OPTS)
|
JW_PKG_PY_BUILD = $(JW_PKG_PY_PROJECTS) build $(JW_PKG_PY_EXTRA_BUILD_OPTS)
|
||||||
PKG_MANAGER ?= $(TIME) $(JW_PKG_PY) --interactive=$(INTERACTIVE) distro
|
PKG_MANAGER ?= $(TIME) $(JW_PKG_PY) --interactive=$(INTERACTIVE) pkg
|
||||||
|
|
||||||
ifneq ($(origin PROJECTS_DIR_REMOTE_BASE),undefined)
|
ifneq ($(origin PROJECTS_DIR_REMOTE_BASE),undefined)
|
||||||
PGIT_SH += --remote-base $(PROJECTS_DIR_REMOTE_BASE)
|
PGIT_SH += --remote-base $(PROJECTS_DIR_REMOTE_BASE)
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ GIT_MAIN_BRANCH ?= master
|
||||||
|
|
||||||
OPT_JANWARE_PROJECT ?= -j
|
OPT_JANWARE_PROJECT ?= -j
|
||||||
INTERACTIVE ?= auto
|
INTERACTIVE ?= auto
|
||||||
PKG_MANAGER ?= $(JW_PKG_PY) --interactive=$(INTERACTIVE) distro
|
PKG_MANAGER ?= $(JW_PKG_PY) --interactive=$(INTERACTIVE) pkg
|
||||||
|
|
||||||
ifeq ($(OPT_JANWARE_PROJECT),-j)
|
ifeq ($(OPT_JANWARE_PROJECT),-j)
|
||||||
REMOTE_GIT_FLAVOUR ?= proj
|
REMOTE_GIT_FLAVOUR ?= proj
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ from .Cmd import Cmd as CmdBase
|
||||||
class CmdDistro(CmdBase): # export
|
class CmdDistro(CmdBase): # export
|
||||||
|
|
||||||
def __init__(self, parent: App) -> None:
|
def __init__(self, parent: App) -> None:
|
||||||
super().__init__(parent, 'distro', help="System package manager wrapper")
|
super().__init__(parent, 'distro', help="Miscellaneous platform-related comamnds")
|
||||||
self._add_subcommands()
|
self._add_subcommands()
|
||||||
|
|
||||||
def add_arguments(self, p: ArgumentParser) -> None:
|
def add_arguments(self, p: ArgumentParser) -> None:
|
||||||
|
|
|
||||||
15
src/python/jw/pkg/cmds/CmdPkg.py
Normal file
15
src/python/jw/pkg/cmds/CmdPkg.py
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
from ..App import App
|
||||||
|
from .Cmd import Cmd as CmdBase
|
||||||
|
|
||||||
|
class CmdPkg(CmdBase): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: App) -> None:
|
||||||
|
super().__init__(parent, 'pkg', help="System package manager wrapper")
|
||||||
|
self._add_subcommands()
|
||||||
|
|
||||||
|
def add_arguments(self, p: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(p)
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from argparse import Namespace, ArgumentParser
|
|
||||||
|
|
||||||
from .Cmd import Cmd
|
|
||||||
from ..CmdDistro import CmdDistro
|
|
||||||
|
|
||||||
class CmdPkg(Cmd): # export
|
|
||||||
|
|
||||||
def __init__(self, parent: CmdDistro) -> None:
|
|
||||||
super().__init__(parent, 'pkg', help="Show package information")
|
|
||||||
self._add_subcommands()
|
|
||||||
|
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
|
||||||
super().add_arguments(parser)
|
|
||||||
|
|
||||||
async def _run(self, args: Namespace) -> None:
|
|
||||||
return await super()._run(args)
|
|
||||||
16
src/python/jw/pkg/cmds/pkg/Cmd.py
Normal file
16
src/python/jw/pkg/cmds/pkg/Cmd.py
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from ...lib.Distro import Distro
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
|
||||||
|
from ..Cmd import Cmd as Base
|
||||||
|
|
||||||
|
class Cmd(Base): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg, name: str, help: str) -> None:
|
||||||
|
super().__init__(parent, name, help)
|
||||||
18
src/python/jw/pkg/cmds/pkg/CmdDelete.py
Normal file
18
src/python/jw/pkg/cmds/pkg/CmdDelete.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from .Cmd import Cmd
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
|
||||||
|
class CmdDelete(Cmd): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg) -> None:
|
||||||
|
super().__init__(parent, 'delete', help="Delete packages by name")
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
parser.add_argument("names", nargs="*", help="Names of packages to be deleted")
|
||||||
|
|
||||||
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
return await self.distro.delete(args.names)
|
||||||
18
src/python/jw/pkg/cmds/pkg/CmdDup.py
Normal file
18
src/python/jw/pkg/cmds/pkg/CmdDup.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from .Cmd import Cmd
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
|
||||||
|
class CmdDup(Cmd): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg) -> None:
|
||||||
|
super().__init__(parent, 'dup', help="Upgrade distribution")
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
parser.add_argument('--download-only', default=False, action='store_true',
|
||||||
|
help='Only download packages from the repos, don\'t install them, yet')
|
||||||
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
return await self.distro.dup(download_only=args.download_only)
|
||||||
22
src/python/jw/pkg/cmds/pkg/CmdInstall.py
Normal file
22
src/python/jw/pkg/cmds/pkg/CmdInstall.py
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from .Cmd import Cmd
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
|
||||||
|
class CmdInstall(Cmd): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg) -> None:
|
||||||
|
super().__init__(parent, 'install', help="Install the distribution's notion of available packages")
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
parser.add_argument("names", nargs="*", help="Packages to be installed")
|
||||||
|
parser.add_argument('--only-update', default=False, action='store_true', help='Only update the listed packages, don\'t install them')
|
||||||
|
parser.add_argument('-F', '--fixed-strings', action='store_true',
|
||||||
|
help='Don\'t expand platform.expand_macros macros in <names>')
|
||||||
|
|
||||||
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
names = names if args.fixed_strings else self.app.distro.expand_macros(args.names)
|
||||||
|
return await self.distro.install(names, only_update=args.only_update)
|
||||||
18
src/python/jw/pkg/cmds/pkg/CmdLs.py
Normal file
18
src/python/jw/pkg/cmds/pkg/CmdLs.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from .NamedPkgsCmd import NamedPkgsCmd as Base
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
|
||||||
|
class CmdLs(Base): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg) -> None:
|
||||||
|
super().__init__(parent, 'ls', help="List package contents")
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
for name in args.names:
|
||||||
|
print('\n'.join(await self.parent.distro.pkg_files(name)))
|
||||||
21
src/python/jw/pkg/cmds/pkg/CmdMeta.py
Normal file
21
src/python/jw/pkg/cmds/pkg/CmdMeta.py
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from .NamedPkgsCmd import NamedPkgsCmd as Base
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
|
||||||
|
class CmdMeta(Base): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg) -> None:
|
||||||
|
super().__init__(parent, 'meta', help="List package metadata")
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
packages = await self.distro.select(args.names)
|
||||||
|
for package in packages:
|
||||||
|
if len(args.names) > 1:
|
||||||
|
print(f'-- {name}')
|
||||||
|
print(package)
|
||||||
17
src/python/jw/pkg/cmds/pkg/CmdRebootRequired.py
Normal file
17
src/python/jw/pkg/cmds/pkg/CmdRebootRequired.py
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from .Cmd import Cmd
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
|
||||||
|
class CmdRebootRequired(Cmd): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg) -> None:
|
||||||
|
super().__init__(parent, 'reboot-required', help="Check whether the machine needs rebooting")
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
return await self.distro.reboot_required()
|
||||||
17
src/python/jw/pkg/cmds/pkg/CmdRefresh.py
Normal file
17
src/python/jw/pkg/cmds/pkg/CmdRefresh.py
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from .Cmd import Cmd
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
|
||||||
|
class CmdRefresh(Cmd): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg) -> None:
|
||||||
|
super().__init__(parent, 'refresh', help="Refresh the distribution's notion of available packages")
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
return await self.distro.ref()
|
||||||
23
src/python/jw/pkg/cmds/pkg/CmdSelect.py
Normal file
23
src/python/jw/pkg/cmds/pkg/CmdSelect.py
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
import re
|
||||||
|
|
||||||
|
from ...lib.Package import Package
|
||||||
|
from ...lib.PackageFilter import PackageFilterString
|
||||||
|
from ..CmdPkg import CmdPkg
|
||||||
|
from .Cmd import Cmd
|
||||||
|
|
||||||
|
class CmdSelect(Cmd): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: CmdPkg) -> None:
|
||||||
|
super().__init__(parent, 'select', help="Select packages by filter")
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
parser.add_argument("filter", help="Package filter string")
|
||||||
|
|
||||||
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
filter = PackageFilterString(args.filter) if args.filter else None
|
||||||
|
for p in await self.distro.select(filter):
|
||||||
|
print(p.name)
|
||||||
5
src/python/jw/pkg/cmds/pkg/Makefile
Normal file
5
src/python/jw/pkg/cmds/pkg/Makefile
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
TOPDIR = ../../../../../..
|
||||||
|
PY_UPDATE_INIT_PY = false
|
||||||
|
|
||||||
|
include $(TOPDIR)/make/proj.mk
|
||||||
|
include $(JWBDIR)/make/py-mod.mk
|
||||||
15
src/python/jw/pkg/cmds/pkg/NamedPkgsCmd.py
Normal file
15
src/python/jw/pkg/cmds/pkg/NamedPkgsCmd.py
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
|
from .Cmd import Cmd as Base
|
||||||
|
from ..CmdPkg import CmdPkg as Parent
|
||||||
|
|
||||||
|
class NamedPkgsCmd(Base): # export
|
||||||
|
|
||||||
|
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
||||||
|
super().__init__(parent, name, help)
|
||||||
|
|
||||||
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
|
super().add_arguments(parser)
|
||||||
|
parser.add_argument('names', nargs='*', help='Package names')
|
||||||
11
src/python/jw/pkg/cmds/pkg/__init__.py
Normal file
11
src/python/jw/pkg/cmds/pkg/__init__.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
import importlib, pkgutil
|
||||||
|
|
||||||
|
__all__ = []
|
||||||
|
|
||||||
|
for finder, module_name, ispkg in pkgutil.iter_modules(__path__):
|
||||||
|
if not module_name.startswith("Cmd"):
|
||||||
|
continue
|
||||||
|
module = importlib.import_module(f".{module_name}", __name__)
|
||||||
|
cls = getattr(module, module_name)
|
||||||
|
globals()[module_name] = cls
|
||||||
|
__all__.append(module_name)
|
||||||
Loading…
Reference in a new issue