module template: support de variables supplémentaires avec TEMPLATE_USER_VARS et de la description des variables dans le fichier de configuration

This commit is contained in:
Jephté Clain 2016-12-30 18:21:25 +04:00
parent b920641fca
commit ed1633a30b
1 changed files with 57 additions and 10 deletions

View File

@ -419,15 +419,42 @@ function template_srcdir() {
fi
}
function template_build_vars() {
# Initialiser les tableaux $1 et $2 avec la description des variables $3..@
# les descriptions sont de la forme var[:depvars,...]=desc
# $1 reçoit les noms (depvars... var) parce que les variables dépendantes
# doivent toujours être placées AVANT la variable maitre
# $2 reçoit les noms (depvars...)
# pour chaque description, une variable __TEMPLATE_DESC_var est créée avec
# la valeur desc
local __t_destvs="$1"; shift
local __t_destnw="$1"; shift
local -a __t_depvars
local __t_vardesc __t_var __t_depvar __t_desc
for __t_vardesc in "$@"; do
splitvar "$__t_vardesc" __t_depvar __t_desc
splitpair "$__t_depvar" __t_var __t_depvar
array_split __t_depvars "$__t_depvar" ,
for __t_depvar in "${__t_depvars[@]}"; do
array_addu "$__t_destvs" "$__t_depvar"
[ -n "$__t_destnw" ] && array_addu "$__t_destnw" "$__t_depvar"
done
array_del "$__t_destvs" "$__t_var"
array_add "$__t_destvs" "$__t_var"
eval "__TEMPLATE_DESC_$__t_var=\"\$__t_desc\""
done
}
function templatectl_config() {
# Obtenir le chemin vers le fichier de configuration pour le répertoire $1
# Si $2==nohideconfig, utiliser le nom CONFIG.conf, sinon utiliser par défaut
# .CONFIG sauf si le fichier CONFIG.conf existe
# Obtenir le chemin vers le fichier de configuration pour le répertoire $1 Si
# l'un des fichiers CONFIG.conf ou .CONFIG existent déjà, prendre ceux-là.
# Sinon, si $2==nohideconfig, utiliser le nom CONFIG.conf, sinon utiliser
# .CONFIG
local config="$(basename -- "$TEMPLATECTL_CONFIG")"
if [ -f "$1/$config.conf" -o "$2" == nohideconfig ]; then
echo "$1/$config.conf"
else
echo "$1/.$config"
if [ -f "$1/$config.conf" ]; then echo "$1/$config.conf"
elif [ -f "$1/.$config" ]; then echo "$1/.$config"
elif [ "$2" == nohideconfig ]; then echo "$1/$config.conf"
else echo "$1/.$config"
fi
}
@ -449,6 +476,8 @@ function templatectl_loadvars() {
# devraient pas être écrits dans le fichier des variables, sauf si elles
# reçoivent une valeur explicite de la part de l'utilisateur. Ce tableau est
# mis à jour lors de l'analyse du tableau TEMPLATECTL_VARS
# - TEMPLATE_USER_VARS contient une liste de noms de tableaux qui sont définis
# en plus et qui peuvent être utilisés par des scripts annexes
local -a __template_vars __dynamic_vars
local __t_var __t_name __t_value
@ -469,6 +498,11 @@ function templatectl_loadvars() {
done
array_contains TEMPLATE_DYNAMIC_VARS configdir && __template_set_var configdir "$configdir"
is_defined TEMPLATE_USER_VARS || TEMPLATE_USER_VARS=()
for __t_var in "${TEMPLATE_USER_VARS[@]}"; do
is_defined "$__t_var" || array_new "$__t_var"
done
local __t_modified=1
for __t_var in "${TEMPLATECTL_VARS[@]}"; do
splitvar "$__t_var" __t_name __t_value
@ -479,20 +513,33 @@ function templatectl_loadvars() {
function templatectl_writevars() {
# Ecrire les variables dans le fichier $1
local __t_var
local __t_var __t_desc
echo "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8" >"$1"
for __t_var in "${TEMPLATE_USER_VARS[@]}"; do
__t_desc="__TEMPLATE_DESC_$__t_var"
[ -n "${!__t_desc}" ] && echo "# ${!__t_desc}" >>"$1"
if is_array "$__t_var"; then
set_array_cmd "$__t_var" >>"$1"
else
echo_setv "$__t_var" "${!__t_var}" >>"$1"
fi
done
if [ ${#TEMPLATE_DYNAMIC_VARS[*]} -gt 0 ]; then
echo "__dynamic_vars=(" >>"$1"
for __t_var in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue
echo_setv "$__t_var=${!__t_var}" >>"$1"
__t_desc="__TEMPLATE_DESC_$__t_var"
[ -n "${!__t_desc}" ] && echo "# ${!__t_desc}" >>"$1"
echo_setv "$__t_var" "${!__t_var}" >>"$1"
done
echo ")" >>"$1"
fi
echo "__template_vars=(# ne pas modifier" >>"$1"
for __t_var in "${TEMPLATE_STATIC_VARS[@]}"; do
array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue
echo_setv "$__t_var=${!__t_var}" >>"$1"
__t_desc="__TEMPLATE_DESC_$__t_var"
[ -n "${!__t_desc}" ] && echo "# ${!__t_desc}" >>"$1"
echo_setv "$__t_var" "${!__t_var}" >>"$1"
done
echo ")" >>"$1"
}