From 4eb51e34a7d99fa756d01c185acd7fdf3f694676 Mon Sep 17 00:00:00 2001 From: Rezart Qelibari Date: Sat, 12 Feb 2022 19:28:50 +0100 Subject: [PATCH] Allow config generation for later use --- install.sh | 18 ++++++++++++------ spec/askNecessaryQuestions_spec.sh | 30 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 spec/askNecessaryQuestions_spec.sh diff --git a/install.sh b/install.sh index fa99754..8ecabef 100755 --- a/install.sh +++ b/install.sh @@ -134,7 +134,6 @@ function generateConfigKeysFromQuestionID() { function answerQuestionsFromConfigOrAskUser() { local questionID - config setappname "de.astzweig.macos.system-setup" for questionID in "${(k)questions[@]}"; do local value configkeys=() generateConfigKeysFromQuestionID "${mod}" "${questionID}" @@ -149,7 +148,9 @@ function answerQuestionsFromConfigOrAskUser() { function askNecessaryQuestions() { local mod - for mod in "${modulesToInstall[@]}"; do + config setappname "de.astzweig.macos.system-setup" + [ -n "${config_only}" ] && config setconfigfile "${config_only}" + for mod in ${modulesToInstall[@]}; do local -A questions=() populateQuestionsWithModuleRequiredInformation answerQuestionsFromConfigOrAskUser @@ -200,15 +201,19 @@ function main() { Usage: $0 [options] [-m PATH]... [...] Install all modules in module search path. If any arg is given, - install only modules that either match any given or whose path ends - like any of the given . + install only modules that either match any given or whose path ends + like any of the given . Options: -i, --inverse Exclude the given instead. -m PATH, --modpath PATH Include PATH in the module search path. + -c PATH, --config PATH Read module answers from config file at PATH. -l, --list List modules that are going to be installed and - exit without installation. Modules are printed in - minimal but still distinct paths. + exit without installation. Modules are printed in + minimal but still distinct paths. + --config-only PATH Ask module questions, generate config at PATH and + exit. Useful for subsequent runs with c option. + Any file at PATH will be overwritten. ---- $0 0.1.0 Copyright (C) 2022 Rezart Qelibari, Astzweig GmbH & Co. KG @@ -220,6 +225,7 @@ function main() { autoloadZShLib loadModules askNecessaryQuestions + [ -z "${config_only}" ] || return 0 installModules lop debug "Current working dir is: `pwd`" } diff --git a/spec/askNecessaryQuestions_spec.sh b/spec/askNecessaryQuestions_spec.sh new file mode 100644 index 0000000..1ae176e --- /dev/null +++ b/spec/askNecessaryQuestions_spec.sh @@ -0,0 +1,30 @@ +Describe 'askNecessaryQuestions' + Include ./install.sh + + It 'sets config app name' + appname='' + config() { [ "$1" = setappname ] && appname="$2" } + When call askNecessaryQuestions + The variable 'appname' should eq 'de.astzweig.macos.system-setup' + End + + It 'sets config file path' + configpath='' + config() { [ "$1" = setconfigfile ] && configpath="$2" } + config_only='/my/file/path' + When call askNecessaryQuestions + The variable 'configpath' should eq '/my/file/path' + End + + It 'writes config to given file' + declare -A answers + config_only="`mktemp`" + modulesToInstall=('mymodule') + populateQuestionsWithModuleRequiredInformation() { questions+=('my-question' $'What is my question?\ninfo') } + readConfig() { config read mymodule questions my_question } + Data 'myanswer' + When call askNecessaryQuestions + The variable answers should eq 'myanswer' + The result of function readConfig should eq 'myanswer' + End +End