From 401c29af76d2abf477ae5c44082e0692ddfecb6d Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Mon, 14 Aug 2017 16:25:28 +0200 Subject: [PATCH] Close #326: Implement command to retrieve and set configuration values (#359) * Implement command to retrieve and set configuration values * qemu: show advice to use "pmbootstrap config" * Allow "pmbootstrap config" without positional arguments (prints the full config) * Check valid variable names --- pmb/helpers/frontend.py | 21 +++++++++++++++++++++ pmb/helpers/logging.py | 5 +++++ pmb/parse/arguments.py | 6 ++++++ pmb/qemu/run.py | 3 ++- 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/pmb/helpers/frontend.py b/pmb/helpers/frontend.py index 69b18fd6..b0a4be51 100644 --- a/pmb/helpers/frontend.py +++ b/pmb/helpers/frontend.py @@ -21,6 +21,8 @@ along with pmbootstrap. If not, see . import logging import json +import sys + import pmb.aportgen import pmb.build import pmb.config @@ -80,6 +82,25 @@ def chroot(args): pmb.chroot.root(args, args.command, suffix, log=False) +def config(args): + pmb.helpers.logging.disable() + if args.name and args.name not in pmb.config.defaults: + valid_keys = ", ".join(sorted(pmb.config.defaults.keys())) + print("The variable name you have specified is invalid.") + print("The following are supported: " + valid_keys) + sys.exit(1) + + cfg = pmb.config.load(args) + if args.value: + cfg["pmbootstrap"][args.name] = args.value + pmb.config.save(args, cfg) + elif args.name: + value = cfg["pmbootstrap"].get(args.name, "") + print(value) + else: + cfg.write(sys.stdout) + + def index(args): pmb.build.index_repo(args) diff --git a/pmb/helpers/logging.py b/pmb/helpers/logging.py index 255ea280..d92172b8 100644 --- a/pmb/helpers/logging.py +++ b/pmb/helpers/logging.py @@ -101,3 +101,8 @@ def init(args): log_handler._args = args handler.setFormatter(formatter) root_logger.addHandler(handler) + + +def disable(): + logger = logging.getLogger() + logger.disabled = True diff --git a/pmb/parse/arguments.py b/pmb/parse/arguments.py index 1917459a..790074fe 100644 --- a/pmb/parse/arguments.py +++ b/pmb/parse/arguments.py @@ -218,6 +218,12 @@ def arguments(): parse_apkindex.add_argument("apkindex_path") parse_apkindex.add_argument("package", default=None, nargs="?") + # Action: config + config = sub.add_parser("config", + help="get and set pmbootstrap options") + config.add_argument("name", nargs="?", help="variable name") + config.add_argument("value", nargs="?", help="set variable to value") + # Action: qemu qemu = sub.add_parser("qemu") qemu.add_argument("--arch", choices=["aarch64", "arm", "x86_64"], diff --git a/pmb/qemu/run.py b/pmb/qemu/run.py index 9e9c36a3..20cdcfd6 100644 --- a/pmb/qemu/run.py +++ b/pmb/qemu/run.py @@ -40,7 +40,8 @@ def system_image(args, device): logging.debug("Could not find system image: " + path) img_command = "pmbootstrap install" if device != args.device: - img_command = "pmbootstrap init' and '" + img_command + img_command = ("pmbootstrap config device " + device + + "' and '" + img_command) message = "The system image '{0}' has not been generated yet, please" \ " run '{1}' first.".format(device, img_command) raise RuntimeError(message)