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
This commit is contained in:
Pablo Castellano 2017-08-14 16:25:28 +02:00 committed by Oliver Smith
parent ab1bcd2e6f
commit 401c29af76
4 changed files with 34 additions and 1 deletions

View File

@ -21,6 +21,8 @@ along with pmbootstrap. If not, see <http://www.gnu.org/licenses/>.
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)

View File

@ -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

View File

@ -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"],

View File

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