From f24541dbe4c69dfc75bba43e6fd9f1db7e639568 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Fri, 6 Mar 2026 09:33:25 +0100 Subject: [PATCH] pkg.App: Add options --distro-id, --interactive Add the global options --distro-id and --interactive, and expose them as properties App.distro_id and App.interactive, respectively. Signed-off-by: Jan Lindemann --- src/python/jw/pkg/App.py | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/python/jw/pkg/App.py b/src/python/jw/pkg/App.py index ca7d0aad..b602af92 100644 --- a/src/python/jw/pkg/App.py +++ b/src/python/jw/pkg/App.py @@ -211,6 +211,7 @@ class App(Base): # -- Members without default values self.__opt_os: str|None = None + self.__opt_interactive: bool|None = None self.__top_name: str|None = None self.__os_release: str|None = None self.__distro_id: str|None = None @@ -220,6 +221,7 @@ class App(Base): self.__res_cache = ResultCache() self.__topdir: str|None = None self.__pretty_topdir: str|None = None + self.__exec_context: ExecContext|None = None # -- Members with default values self.__topdir_fmt = 'absolute' @@ -234,6 +236,8 @@ class App(Base): parser.add_argument('-p', '--prefix', default = None, help='Parent directory of project source directories') parser.add_argument('-O', '--os', default = None, help='Target operating system') + parser.add_argument('--distro-id', default=None, help='Distribution ID (default is taken from /etc/os-release)') + parser.add_argument('--interactive', choices=['true', 'false', 'auto'], default='true', help="Wait for user input or try to proceed unattended") async def _run(self, args: argparse.Namespace) -> None: self.__opt_os = args.os @@ -249,6 +253,18 @@ class App(Base): self.__pretty_projs_root = args.prefix return await super()._run(args) + @property + def interactive(self) -> bool: + if self.__opt_interactive is None: + match self.args.interactive: + case 'true': + self.__opt_interactive = True + case 'false': + self.__opt_interactive = False + case 'auto': + self.__opt_interactive = sys.stdin.isatty() + return self.__opt_interactive + @property def top_name(self): return self.__top_name @@ -282,14 +298,16 @@ class App(Base): @property def distro_id(self) -> str: if self.__distro_id is None: - val = self.os_release_field('ID', throw=True) - match val: - case 'opensuse-tumbleweed': - self.__distro_id = 'suse' - case 'kali': - self.__distro_id = 'kali' - case _: - self.__distro_id = val + ret = self.args.distro_id # The distribution ID requested by the command line + if ret is None: + # The ID of the distribution we run on + ret = self.os_release_field('ID', throw=True) + match ret: + case 'opensuse-tumbleweed': + ret = 'suse' + case 'kali': + ret = 'kali' + self.__distro_id = ret return self.__distro_id @property