From 9eb563d5758f2a14447bf750e90c11ea8e2db631 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 8 Jul 2014 12:10:48 +0400 Subject: [PATCH] =?UTF-8?q?possibilit=C3=A9=20de=20sp=C3=A9cifier=20ind?= =?UTF-8?q?=C3=A9pendamment=20type=20et=20sous-type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/default/nutools | 4 +- lib/templates/shell | 105 +++++++++++++++++++++++++++++++------------- 2 files changed, 77 insertions(+), 32 deletions(-) diff --git a/lib/default/nutools b/lib/default/nutools index 2783d39..e067c5b 100644 --- a/lib/default/nutools +++ b/lib/default/nutools @@ -3,7 +3,9 @@ # Type de script shell à générer par défaut pour la commande 'utempl -t sh' # auto (par défaut), system-or-local, default, manual ou vanilla -#SHELL_TYPE=auto +# Le type d'analyse d'argument est spécifié avec un préfixe +auto (par défaut) +# ou +manual +#SHELL_TYPE=auto+auto # Utilisateur par défaut pour la commande ussh #USSH_USER=root diff --git a/lib/templates/shell b/lib/templates/shell index 79ea20a..78a118e 100755 --- a/lib/templates/shell +++ b/lib/templates/shell @@ -18,6 +18,10 @@ OPTIONS default, d -- utilise /etc/ulibauto et genparse() manual, m -- utilise /etc/ulib et parse_opts() vanilla, v -- script simple + auto -- choisir system-or-local, default ou manual en fonction de + la présence de [lib/]ulib et/ou de /etc/ulibauto + autom -- choisir system-or-local ou manual en fonction de + la présence de [lib/]ulib -e, --edit -g, --no-edit Editer (resp. ne pas éditer) le fichier après l'avoir généré. @@ -66,6 +70,36 @@ function check_overwrite() { return 0 } +function __fixtypes() { + if [[ "$type" == *+* ]]; then + stype="${type##*+}" + type="${type%+*}" + else + stype= + fi + + case "$type" in + system-or-local|sol|sl|u) type=system-or-local;; + default|def|d) type=default;; + manual|man|m) type=manual;; + vanilla|van|v) type=vanilla;; + ""|auto|a) type=auto;; + autom) type=autom;; + *) + ewarn "$type: type non reconnu. sélection de la valeur 'default'" + type=default + ;; + esac + case "$stype" in + manual|m) stype=manual;; + ""|auto|a) stype=auto;; + *) + ewarn "$stype: sous-type non reconnu. sélection de la valeur 'auto'" + stype=auto + ;; + esac +} + function generate_shell() { local file="$1" local dir="$(dirname "$file")" @@ -73,20 +107,16 @@ function generate_shell() { check_overwrite "$1" || return - case "$type" in - system-or-local|sol|sl|u) type=system-or-local;; - default|def|d) type=default;; - manual|man|m) type=manual;; - vanilla|van|v) type=vanilla;; - auto|a) type=;; - esac + local type="$type" stype + __fixtypes local modeline="# -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding" if [ -n "$executable" ]; then + # script exécutable etitle "$(ppath "$file")" - if [ -z "$type" ]; then - if [ -d "$dir/ulib" ]; then + if [[ "$type" == auto* ]]; then + if [ -d "$dir/ulib" -o -d "$dir/lib/ulib" ]; then ask_yesno "\ Le type de script 'system-or-local' a été sélectionné automatiquement Une librairie ulib locale est présente. En chargeant ulib/auto, la librairie @@ -94,7 +124,7 @@ système /etc/ulib sera utilisée si elle est disponible. Sinon, la librairie locale ulib/ulib sera utilisée. Voulez-vous générer un script avec cette configuration?" X && type=system-or-local - elif [ -f /etc/ulibauto ]; then + elif [ -f /etc/ulibauto -a "$type" == auto ]; then ask_yesno "\ Le type de script 'default' a été sélectionné automatiquement En chargeant /etc/ulibauto, la librairie ulib système sera utilisée, et les @@ -104,18 +134,18 @@ Voulez-vous générer un script avec cette configuration?" X && else ask_yesno "\ Le type de script 'manual' a été sélectionné automatiquement -Une vieille version de nutools est installée. Il faut charger /etc/ulib et +En chargeant /etc/ulib, la librairie ulib système sera utilisée, mais il faut définir manuellement les paramètres à utiliser. Voulez-vous générer un script avec cette configuration?" X && type=manual fi fi - if [ -z "$type" ] && check_interaction -c; then + if [[ "$type" == auto* ]] && check_interaction -c; then enote "Plusieurs type de scripts peuvent être générés: - Avec le type 'system-or-local', on assume qu'une librairie ulib locale est - présente. Le fichier ulib/auto est chargé, ce qui a pour conséquence que la - librairie système /etc/ulib est utilisée si elle est disponible. Sinon, la - librairie locale ulib/ulib est utilisée. + présente. Le fichier [lib/]ulib/auto est chargé, ce qui a pour conséquence que + la librairie système /etc/ulib est utilisée si elle est disponible. Sinon, la + librairie locale [lib/]ulib/ulib est utilisée. - Avec le type 'default', le fichier /etc/ulibauto est chargé. Les paramètres par défaut sont utilisés: urequire DEFAULTS et genparse() pour l'analyse des arguments. @@ -129,12 +159,13 @@ Voulez-vous générer un script avec cette configuration?" X && -t "Choix du type de script" \ -m "Veuillez choisir le type de script à générer" \ -d manual + __fixtypes fi - if [ -z "$type" ]; then + if [[ "$type" == auto* ]]; then if [ -d "$dir/ulib" -o -d "$dir/lib/ulib" ]; then enote "Le type de script 'system-or-local' a été sélectionné automatiquement" type=system-or-local - elif [ -f /etc/ulibauto ]; then + elif [ -f /etc/ulibauto -a "$type" == auto ]; then enote "Le type de script 'default' a été sélectionné automatiquement" type=default else @@ -143,6 +174,7 @@ Voulez-vous générer un script avec cette configuration?" X && fi fi + # d'abord générer l'en-tête par rapport au type if [ "$type" == system-or-local ]; then local ulibdir if [ -d "$dir/ulib" ]; then @@ -154,25 +186,27 @@ Voulez-vous générer un script avec cette configuration?" X && fi echo >"$file" '#!/bin/bash '"$modeline"' -source "$(dirname "$0")/'"$ulibdir"'/auto" || exit 1 -#HELP_DESC="$scriptname: " -#HELP_ARG_DESC= -eval "$(genparse)" -' +source "$(dirname "$0")/'"$ulibdir"'/auto" || exit 1' elif [ "$type" == default ]; then echo >"$file" '#!/bin/bash '"$modeline"' -source /etc/ulibauto || exit 1 -#HELP_DESC="$scriptname: " -#HELP_ARG_DESC= -eval "$(genparse)" -' +source /etc/ulibauto || exit 1' elif [ "$type" == manual ]; then echo >"$file" '#!/bin/bash '"$modeline"' source /etc/ulib || exit 1 -urequire DEFAULTS +urequire DEFAULTS' + elif [ "$type" == vanilla ]; then + echo >"$file" "#!/bin/bash +$modeline" + fi + # ensuite générer le code pour l'analyse des arguments en fonction du + # sous-type + if [ "$type" != vanilla ]; then + case "$stype" in + manual) + echo >>"$file" ' function display_help() { uecho "$scriptname: @@ -186,16 +220,25 @@ parse_opts "${PRETTYOPTS[@]}" \ --help '\''$exit_with display_help'\'' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" ' - elif [ "$type" == vanilla ]; then - echo >"$file" "#!/bin/bash -$modeline" + ;; + auto) + echo >>"$file" '#HELP_DESC="$scriptname: " +#HELP_ARG_DESC= +eval "$(genparse)" +' ;; + esac fi + + # rendre le fichier exécutable chmod +x "$file" eend + else + # fichier shell non exécutable estep "$(ppath "$file")" echo >"$file" "$modeline" fi + [ -n "$2" ] && array_add "$2" "$file" return 0 }