modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-03-05 23:52:57 +04:00
parent 9fea3c603b
commit 3f47c40a0e
5 changed files with 88 additions and 4 deletions

View File

@ -65,12 +65,20 @@ usage
-o, --longopt -o, --longopt
: option sans argument : option sans argument
-a:, --mandarg -a:, --mandarg:
: option avec argument obligatoire : option avec argument obligatoire
l'option peut être suivi d'une valeur qui décrit l'argument attendu e.g
-a:file pour un fichier. cette valeur est mise en majuscule lors de
l'affichage de l'aide. pour le moment, cette valeur n'est pas signifiante.
-b::, --optarg:: -b::, --optarg::
: option avec argument facultatif : option avec argument facultatif
l'option peut être suivi d'une valeur qui décrit l'argument attendu e.g
-b::file pour un fichier. cette valeur est mise en majuscule lors de
l'affichage de l'aide. pour le moment, cette valeur n'est pas signifiante.
action action
: action à effectuer si cette option est utilisée. plusieurs syntaxes sont valides: : action à effectuer si cette option est utilisée. plusieurs syntaxes sont valides:
* 'NAME' met à jour la variable en fonction du type d'argument: l'incrémenter * 'NAME' met à jour la variable en fonction du type d'argument: l'incrémenter
@ -159,7 +167,7 @@ function __parse_args() {
*) eerror "Invalid arg definition: expected option, got '$1'"; eval "$__DIE";; *) eerror "Invalid arg definition: expected option, got '$1'"; eval "$__DIE";;
esac esac
# est-ce que l'option prend un argument? # est-ce que l'option prend un argument?
local __def __witharg= local __def __witharg __valdesc
for __def in "${__defs[@]}"; do for __def in "${__defs[@]}"; do
if [ "${__def%::*}" != "$__def" ]; then if [ "${__def%::*}" != "$__def" ]; then
[ "$__witharg" != : ] && __witharg=:: [ "$__witharg" != : ] && __witharg=::
@ -300,11 +308,14 @@ $prefix$usage"
fi fi
# est-ce que l'option prend un argument? # est-ce que l'option prend un argument?
__witharg= __witharg=
__valdesc=value
for __def in "${__defs[@]}"; do for __def in "${__defs[@]}"; do
if [ "${__def%::*}" != "$__def" ]; then if [ "${__def%::*}" != "$__def" ]; then
[ "$__witharg" != : ] && __witharg=:: [ "$__witharg" != : ] && __witharg=::
[ -n "${__def#*::}" ] && __valdesc="[${__def#*::}]"
elif [ "${__def%:*}" != "$__def" ]; then elif [ "${__def%:*}" != "$__def" ]; then
__witharg=: __witharg=:
[ -n "${__def#*:}" ] && __valdesc="${__def#*:}"
fi fi
done done
# description de l'option # description de l'option
@ -327,7 +338,7 @@ $prefix$usage"
fi fi
thelp="$thelp$__def" thelp="$thelp$__def"
done done
[ -n "$__witharg" ] && thelp="$thelp VALUE" [ -n "$__witharg" ] && thelp="$thelp ${__valdesc^^}"
# sauter l'action # sauter l'action
shift shift
# prendre la description le cas échéant # prendre la description le cas échéant
@ -349,7 +360,7 @@ $prefix$usage"
uecho "$help" uecho "$help"
exit 0 exit 0
} }
if [ "$__popt" != + ]; then if [ "$__popt" != - ]; then
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
if [ "$1" == -- ]; then if [ "$1" == -- ]; then
shift shift

4
bash/src/donk.build.sh Normal file
View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@cooked nocomments
module: donk.build "construire des images docker"
require: donk.common

3
bash/src/donk.common.sh Normal file
View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@cooked nocomments
module: donk.common "fonctions communes"

41
bash/src/donk.help.sh Normal file
View File

@ -0,0 +1,41 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@cooked nocomments
module: donk.help "aide de donk"
DONK_VALID_ACTIONS=(
dump:d
build:b
clean:k
)
dump_SUMMARY="afficher les valeurs des variables et ce que ferait l'action build"
build_SUMMARY="construire les images"
clean_SUMMARY="nettoyer le projet des fichiers créés avec 'copy gitignore=', en utilisant la commande 'git clean -dX'"
DONK_HELP_SECTIONS=(
base:b
reference:ref:r
)
function donk_help() {
:
}
function _donk_show_actions() {
local action summary
echo "
ACTIONS"
for action in "${DONK_VALID_ACTIONS[@]}"; do
IFS=: read -a action <<<"$action"; action="${action[0]}"
summary="${action}_SUMMARY"; summary="${!summary}"
echo "\
$action
$summary"
done
}
function _donk_show_help() {
if [ -z "$value_" ]; then showhelp@
else donk_help "$value_"
fi
exit $?
}

25
bin/donk Executable file
View File

@ -0,0 +1,25 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/../load.sh" || exit 1
require: donk.help
# par défaut, c'est l'action build
case "$1" in
-h*|--help|--help=*|--help++) ;;
-*) set -- build "$@";;
esac
args=(
"construire des images docker"
"ACTION [options]
$(_donk_show_actions)"
+
-h::section,--help '$_donk_show_help' "Afficher l'aide de la section spécifiée.
Les sections valides sont: ${DONK_HELP_SECTIONS[*]%%:*}"
--help++ '$_donk_show_help' "++Afficher l'aide"
)
parse_args "$@"; set -- "${args[@]}"
action="$1"; shift
require: "donk.$action" || die
"donk_$action" "$@"