From ed1633a30bee00595cfbd6c07ea9f01ad0424f52 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 30 Dec 2016 18:21:25 +0400 Subject: [PATCH] =?UTF-8?q?module=20template:=20support=20de=20variables?= =?UTF-8?q?=20suppl=C3=A9mentaires=20avec=20TEMPLATE=5FUSER=5FVARS=20et=20?= =?UTF-8?q?de=20la=20description=20des=20variables=20dans=20le=20fichier?= =?UTF-8?q?=20de=20configuration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/template | 67 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/lib/ulib/template b/lib/ulib/template index 0699063..ff7f140 100644 --- a/lib/ulib/template +++ b/lib/ulib/template @@ -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" }