diff --git a/make/projects-dir-minimal.mk b/make/projects-dir-minimal.mk index 85b34c7e..7130e9ea 100644 --- a/make/projects-dir-minimal.mk +++ b/make/projects-dir-minimal.mk @@ -22,7 +22,7 @@ Q ?= @ ifeq ($(origin PROJECTS_DIR_REMOTE_BASE),undefined) ifneq ($(wildcard $(JWBDIR)),) - PROJECTS_DIR_REMOTE_BASE := $(shell /usr/bin/python3 $(JWBDIR)/scripts/jw-projects.py -p . get-auth-info --remote-base --only-values) + PROJECTS_DIR_REMOTE_BASE := $(shell /usr/bin/python3 $(JWBDIR)/scripts/jw-projects.py -p . projects get-auth-info --remote-base --only-values) endif ifeq ($(PROJECTS_DIR_REMOTE_BASE),) PROJECTS_DIR_REMOTE_BASE := https://janware.com/code @@ -44,7 +44,7 @@ endif ifeq ($(JANWARE_USER),) ifneq ($(wildcard $(JWBDIR)),) - JANWARE_USER := $(shell /usr/bin/python3 $(JWBDIR)/scripts/jw-projects.py -p . get-auth-info --username --only-values) + JANWARE_USER := $(shell /usr/bin/python3 $(JWBDIR)/scripts/jw-projects.py -p . projects get-auth-info --username --only-values) endif endif diff --git a/make/projects-dir.mk b/make/projects-dir.mk index eb632bfc..4c9ee746 100644 --- a/make/projects-dir.mk +++ b/make/projects-dir.mk @@ -116,7 +116,7 @@ ifeq ($(TIME),) TIME += -p endif endif -PROJECTS_PY = $(TIME) python3 $(JWB_SCRIPT_DIR)/jw-projects.py --prefix $(shell pwd) $(PROJECTS_PY_EXTRA_OPTS) +PROJECTS_PY = $(TIME) python3 $(JWB_SCRIPT_DIR)/jw-projects.py --prefix $(shell pwd) $(PROJECTS_PY_EXTRA_OPTS) projects PROJECTS_PY_BUILD = $(PROJECTS_PY) build $(PROJECTS_PY_EXTRA_BUILD_OPTS) PGIT_SH := /bin/bash $(JWB_SCRIPT_DIR)/pgit.sh diff --git a/make/projects.mk b/make/projects.mk index ca4f6c81..c43cd272 100644 --- a/make/projects.mk +++ b/make/projects.mk @@ -30,7 +30,7 @@ endif include $(JWBDIR)/make/py-version.mk ifneq ($(TOPDIR),) - proj_query_cmd = PYTHONPATH=$(JWBDIR)/src/python $(PYTHON) $(JWB_SCRIPT_DIR)/jw-projects.py -p $(PROJECTS_DIR) -t $(TOPDIR) $(PROJECTS_PY_EXTRA_OPTS) + proj_query_cmd = PYTHONPATH=$(JWBDIR)/src/python $(PYTHON) $(JWB_SCRIPT_DIR)/jw-projects.py -p $(PROJECTS_DIR) -t $(TOPDIR) $(PROJECTS_PY_EXTRA_OPTS) projects proj_query = $(shell $(proj_query_cmd) $(1)) proj_dir = $(call proj_query,proj-dir $(1)) htdocs_dir = $(call proj_query,htdocs-dir $(1)) diff --git a/make/topdir.mk b/make/topdir.mk index 21f0966d..29d7e713 100644 --- a/make/topdir.mk +++ b/make/topdir.mk @@ -163,7 +163,7 @@ git-update-project-description: ssh $(JANWARE_USER)@git.janware.com "/opt/jw-pkg/bin/git-srv-admin.sh $(OPT_JANWARE_PROJECT) update-descriptions $(PROJECT)" projects-%: - $(PYTHON) $(JWB_SCRIPT_DIR)/jw-projects.py build $* $(PROJECT) + $(PYTHON) $(JWB_SCRIPT_DIR)/jw-projects.py projects build $* $(PROJECT) install-deps-devel: sudo zypper in $(shell echo $(RPM_REQUIRES_DEVEL) | sed "s/ *= */-/g; s/ [^ ]\+-__NEXT_VERSION__//") diff --git a/scripts/create-mkspec.sh b/scripts/create-mkspec.sh index 3ec2324a..f876c85f 100644 --- a/scripts/create-mkspec.sh +++ b/scripts/create-mkspec.sh @@ -41,7 +41,7 @@ subpackage_description() os_cascade() { - # might want to run python3 path/to/jw-projects.py --os=suse-tumbleweed os-cascade + # might want to run python3 path/to/jw-projects.py --os=suse-tumbleweed projects os-cascade # or turn this into a python script and use jw-projects.py as a module. if [ "$DISTRIBUTION" ]; then diff --git a/scripts/pgit.sh b/scripts/pgit.sh index 72a1e10f..1a643e97 100644 --- a/scripts/pgit.sh +++ b/scripts/pgit.sh @@ -145,7 +145,7 @@ clone() local git_srv_admin="$SSH $login@git.janware.com /opt/jw-pkg/bin/git-srv-admin.sh" if [ -z "$projects" ]; then - projects=`$jw_projects list-repos --from-user $fromuser $remote_base` + projects=`$jw_projects projects list-repos --from-user $fromuser $remote_base` [ "$?" != 0 ] && exit 1 fi diff --git a/src/python/jw/pkg/App.py b/src/python/jw/pkg/App.py index 46269ac8..38632007 100644 --- a/src/python/jw/pkg/App.py +++ b/src/python/jw/pkg/App.py @@ -8,8 +8,6 @@ import os, sys, argparse, pwd, re from .lib.App import App as Base from .lib.log import * -from .cmds.build import * - # meaning of pkg.requires.xxx variables # build: needs to be built and installed before this can be built # devel: needs to be installed before this-devel can be installed, i.e. before _other_ packages can be built against this @@ -52,7 +50,7 @@ class ResultCache(object): class App(Base): def __init__(self): - super().__init__("jw-pkg swiss army knife", modules=["jw.pkg.cmds.build"]) + super().__init__("jw-pkg swiss army knife", modules=["jw.pkg.cmds"]) self.global_args = [] self.opt_os = None diff --git a/src/python/jw/pkg/build/__init__.py b/src/python/jw/pkg/build/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/python/jw/pkg/build/cmds/__init__.py b/src/python/jw/pkg/build/cmds/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/python/jw/pkg/build/Cmd.py b/src/python/jw/pkg/cmds/Cmd.py similarity index 54% rename from src/python/jw/pkg/build/Cmd.py rename to src/python/jw/pkg/cmds/Cmd.py index 0b8c19b3..cda5668a 100644 --- a/src/python/jw/pkg/build/Cmd.py +++ b/src/python/jw/pkg/cmds/Cmd.py @@ -1,17 +1,24 @@ # -*- coding: utf-8 -*- from __future__ import annotations -from typing import Type, Union, TypeVar -import inspect, abc, argparse + from argparse import ArgumentParser from ..lib.Cmd import Cmd as Base +from ..lib.Types import LoadTypes class Cmd(Base): # export def __init__(self, name: str, help: str) -> None: super().__init__(name, help) - from ..App import App + + def _add_subcommands(self) -> None: + self.add_subcommands( + LoadTypes( + [__name__.rsplit('.', 1)[0] + '.' + self.name], + type_name_filter=r'Cmd[^.]' + ) + ) async def run(self, args): return self._run(args) diff --git a/src/python/jw/pkg/cmds/CmdProjects.py b/src/python/jw/pkg/cmds/CmdProjects.py new file mode 100644 index 00000000..c8d7c57a --- /dev/null +++ b/src/python/jw/pkg/cmds/CmdProjects.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +import sys, inspect, re +from argparse import ArgumentParser + +from .Cmd import Cmd as CmdBase + +class CmdProjects(CmdBase): # export + + def __init__(self) -> None: + super().__init__('projects', help='Project metadata evaluation for building packages') + self._add_subcommands() + + def add_arguments(self, p: ArgumentParser) -> None: + super().add_arguments(p) + + def _run(self, args): + breakpoint() + raise Exception("Running with args", args) diff --git a/src/python/jw/pkg/build/Makefile b/src/python/jw/pkg/cmds/Makefile similarity index 100% rename from src/python/jw/pkg/build/Makefile rename to src/python/jw/pkg/cmds/Makefile diff --git a/src/python/jw/pkg/cmds/__init__.py b/src/python/jw/pkg/cmds/__init__.py new file mode 100644 index 00000000..82cb3002 --- /dev/null +++ b/src/python/jw/pkg/cmds/__init__.py @@ -0,0 +1 @@ +from .CmdProjects import CmdProjects diff --git a/src/python/jw/pkg/build/cmds/BaseCmdPkgRelations.py b/src/python/jw/pkg/cmds/projects/BaseCmdPkgRelations.py similarity index 100% rename from src/python/jw/pkg/build/cmds/BaseCmdPkgRelations.py rename to src/python/jw/pkg/cmds/projects/BaseCmdPkgRelations.py diff --git a/src/python/jw/pkg/build/cmds/CmdBuild.py b/src/python/jw/pkg/cmds/projects/CmdBuild.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdBuild.py rename to src/python/jw/pkg/cmds/projects/CmdBuild.py diff --git a/src/python/jw/pkg/build/cmds/CmdCflags.py b/src/python/jw/pkg/cmds/projects/CmdCflags.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdCflags.py rename to src/python/jw/pkg/cmds/projects/CmdCflags.py diff --git a/src/python/jw/pkg/build/cmds/CmdCheck.py b/src/python/jw/pkg/cmds/projects/CmdCheck.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdCheck.py rename to src/python/jw/pkg/cmds/projects/CmdCheck.py diff --git a/src/python/jw/pkg/build/cmds/CmdCommands.py b/src/python/jw/pkg/cmds/projects/CmdCommands.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdCommands.py rename to src/python/jw/pkg/cmds/projects/CmdCommands.py diff --git a/src/python/jw/pkg/build/cmds/CmdCreatePkgConfig.py b/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdCreatePkgConfig.py rename to src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py diff --git a/src/python/jw/pkg/build/cmds/CmdExepath.py b/src/python/jw/pkg/cmds/projects/CmdExepath.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdExepath.py rename to src/python/jw/pkg/cmds/projects/CmdExepath.py diff --git a/src/python/jw/pkg/build/cmds/CmdGetAuthInfo.py b/src/python/jw/pkg/cmds/projects/CmdGetAuthInfo.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdGetAuthInfo.py rename to src/python/jw/pkg/cmds/projects/CmdGetAuthInfo.py diff --git a/src/python/jw/pkg/build/cmds/CmdGetval.py b/src/python/jw/pkg/cmds/projects/CmdGetval.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdGetval.py rename to src/python/jw/pkg/cmds/projects/CmdGetval.py diff --git a/src/python/jw/pkg/build/cmds/CmdHtdocsDir.py b/src/python/jw/pkg/cmds/projects/CmdHtdocsDir.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdHtdocsDir.py rename to src/python/jw/pkg/cmds/projects/CmdHtdocsDir.py diff --git a/src/python/jw/pkg/build/cmds/CmdLdflags.py b/src/python/jw/pkg/cmds/projects/CmdLdflags.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdLdflags.py rename to src/python/jw/pkg/cmds/projects/CmdLdflags.py diff --git a/src/python/jw/pkg/build/cmds/CmdLdlibpath.py b/src/python/jw/pkg/cmds/projects/CmdLdlibpath.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdLdlibpath.py rename to src/python/jw/pkg/cmds/projects/CmdLdlibpath.py diff --git a/src/python/jw/pkg/build/cmds/CmdLibname.py b/src/python/jw/pkg/cmds/projects/CmdLibname.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdLibname.py rename to src/python/jw/pkg/cmds/projects/CmdLibname.py diff --git a/src/python/jw/pkg/build/cmds/CmdListRepos.py b/src/python/jw/pkg/cmds/projects/CmdListRepos.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdListRepos.py rename to src/python/jw/pkg/cmds/projects/CmdListRepos.py diff --git a/src/python/jw/pkg/build/cmds/CmdModules.py b/src/python/jw/pkg/cmds/projects/CmdModules.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdModules.py rename to src/python/jw/pkg/cmds/projects/CmdModules.py diff --git a/src/python/jw/pkg/build/cmds/CmdOsCascade.py b/src/python/jw/pkg/cmds/projects/CmdOsCascade.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdOsCascade.py rename to src/python/jw/pkg/cmds/projects/CmdOsCascade.py diff --git a/src/python/jw/pkg/build/cmds/CmdPath.py b/src/python/jw/pkg/cmds/projects/CmdPath.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdPath.py rename to src/python/jw/pkg/cmds/projects/CmdPath.py diff --git a/src/python/jw/pkg/build/cmds/CmdPkgConflicts.py b/src/python/jw/pkg/cmds/projects/CmdPkgConflicts.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdPkgConflicts.py rename to src/python/jw/pkg/cmds/projects/CmdPkgConflicts.py diff --git a/src/python/jw/pkg/build/cmds/CmdPkgProvides.py b/src/python/jw/pkg/cmds/projects/CmdPkgProvides.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdPkgProvides.py rename to src/python/jw/pkg/cmds/projects/CmdPkgProvides.py diff --git a/src/python/jw/pkg/build/cmds/CmdPkgRequires.py b/src/python/jw/pkg/cmds/projects/CmdPkgRequires.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdPkgRequires.py rename to src/python/jw/pkg/cmds/projects/CmdPkgRequires.py diff --git a/src/python/jw/pkg/build/cmds/CmdPrereq.py b/src/python/jw/pkg/cmds/projects/CmdPrereq.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdPrereq.py rename to src/python/jw/pkg/cmds/projects/CmdPrereq.py diff --git a/src/python/jw/pkg/build/cmds/CmdProjDir.py b/src/python/jw/pkg/cmds/projects/CmdProjDir.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdProjDir.py rename to src/python/jw/pkg/cmds/projects/CmdProjDir.py diff --git a/src/python/jw/pkg/build/cmds/CmdPythonpath.py b/src/python/jw/pkg/cmds/projects/CmdPythonpath.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdPythonpath.py rename to src/python/jw/pkg/cmds/projects/CmdPythonpath.py diff --git a/src/python/jw/pkg/build/cmds/CmdPythonpathOrig.py b/src/python/jw/pkg/cmds/projects/CmdPythonpathOrig.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdPythonpathOrig.py rename to src/python/jw/pkg/cmds/projects/CmdPythonpathOrig.py diff --git a/src/python/jw/pkg/build/cmds/CmdRequiredOsPkg.py b/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdRequiredOsPkg.py rename to src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py diff --git a/src/python/jw/pkg/build/cmds/CmdSummary.py b/src/python/jw/pkg/cmds/projects/CmdSummary.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdSummary.py rename to src/python/jw/pkg/cmds/projects/CmdSummary.py diff --git a/src/python/jw/pkg/build/cmds/CmdTest.py b/src/python/jw/pkg/cmds/projects/CmdTest.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdTest.py rename to src/python/jw/pkg/cmds/projects/CmdTest.py diff --git a/src/python/jw/pkg/build/cmds/CmdTmplDir.py b/src/python/jw/pkg/cmds/projects/CmdTmplDir.py similarity index 100% rename from src/python/jw/pkg/build/cmds/CmdTmplDir.py rename to src/python/jw/pkg/cmds/projects/CmdTmplDir.py diff --git a/src/python/jw/pkg/build/cmds/Makefile b/src/python/jw/pkg/cmds/projects/Makefile similarity index 100% rename from src/python/jw/pkg/build/cmds/Makefile rename to src/python/jw/pkg/cmds/projects/Makefile diff --git a/src/python/jw/pkg/cmds/projects/__init__.py b/src/python/jw/pkg/cmds/projects/__init__.py new file mode 100644 index 00000000..7837b8d7 --- /dev/null +++ b/src/python/jw/pkg/cmds/projects/__init__.py @@ -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)