importation initiale dans git
This commit is contained in:
210
udir
Executable file
210
udir
Executable file
@@ -0,0 +1,210 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: gérer les variables de répertoire
|
||||
|
||||
USAGE
|
||||
$scriptname [options] [dir [name=value...]]
|
||||
|
||||
Par défaut, mettre à jour les variables du répertoire avec les définitions
|
||||
données. Attention! Les définitions sont insérées ${COULEUR_JAUNE}*telles quelles*${COULEUR_NORMALE} dans le
|
||||
fichier. Par exemple, pour définir une variable qui contient des espaces,
|
||||
on pourra faire:
|
||||
$scriptname /path/to/dir 'var=\"value with spaces\"'
|
||||
pour définir un tableau:
|
||||
$scriptname /path/to/dir 'array=(first second)'
|
||||
|
||||
OPTIONS
|
||||
-i
|
||||
Afficher la description du répertoire. C'est l'action par défaut si ce
|
||||
script est lancé *sans argument*
|
||||
-d
|
||||
Afficher toutes les variables définies pour le répertoire 'dir'.
|
||||
-x 'cmds;...'
|
||||
Exécuter les commandes dans le contexte des variables définies pour le
|
||||
répertoire.
|
||||
-e
|
||||
Editer les variables du répertoire
|
||||
--local-vars
|
||||
Avec -d, ajouter des directives 'local' aux définitions de variables
|
||||
-A
|
||||
Avec -d et -x, considérer les variables de tous les répertoires parents
|
||||
jusqu'à la racine. Pour ne considérer que les variables du répertoire
|
||||
spécifié (par défaut), utiliser --local-only
|
||||
--help-vars
|
||||
Afficher une descriptions des variables spécifiques aux outils de nutools"
|
||||
}
|
||||
function display_help_vars() {
|
||||
local OENC="$UTF8"
|
||||
uecho "\
|
||||
udir_desc Description du projet contenu dans ce répertoire, affichée avec
|
||||
'udir -i'
|
||||
udir_note Note importante concernant le contenu de ce répertoire.
|
||||
Cette note doit être affichée automatiquement quand on entre dans
|
||||
le répertoire.
|
||||
udir_types Liste de types pour ce répertoire. Les valeurs valides sont:
|
||||
uinst -- un répertoire installable avec uinst.
|
||||
uinst:legacy -- un répertoire installable avec uinst en utilisant
|
||||
l'ancien fichier de configuration .uinst.conf
|
||||
uinst:python -- un répertoire de projet python à installer avec
|
||||
'python setup.py'
|
||||
uinc Mode de dépliage des fichiers avant le déploiement. Les valeurs
|
||||
valides sont:
|
||||
false -- ne jamais faire dépliage/repliage automatique
|
||||
release -- ne faire le dépliage que lors de 'release -u'
|
||||
true -- faire systématiquement le dépliage/repliage pour
|
||||
chaque opération
|
||||
uinc_options
|
||||
Options à passer automatiquement à uinc quand il traite ce
|
||||
répertoire
|
||||
uinc_args Liste des fichiers à traiter par uinc en mode automatique
|
||||
config_scripts
|
||||
Liste de scripts de configuration à lancer avant déploiement,
|
||||
avec les droits de l'utilisateur qui lance uinst.
|
||||
Chacun de ces script est exécuté avec en unique argument un fichier
|
||||
de configuration, qui représente la somme de tous les paramètres
|
||||
qui ont été spécifiés.
|
||||
Les script peuvent augmenter ce fichier de configuration avec
|
||||
d'autres valeurs s'ils le désirent. Ces nouvelles valeurs pourront
|
||||
être utilisées par les scripts suivants, ou les scripts root.
|
||||
Pour annuler le déploiement, les scripts de configuration peuvent
|
||||
créer un fichier nommé 'abort' dans le répertoire qui contient le
|
||||
fichier de configuration. Par défaut, la variable ABORT contient le
|
||||
chemin vers ce fichier, sauf si cette variable a été surchargée par
|
||||
des paramètres du fichier de configuration.
|
||||
configure_variables
|
||||
Liste de variables configurables. Pour chacune des variables de
|
||||
ce tableau, un tableau nommé configure_\${name}_for contient la
|
||||
liste des fichiers qui doivent être mis à jour. Dans ce fichiers,
|
||||
toutes les occurences de @@name@@ sont remplacées par la valeur
|
||||
de la variable \$name.
|
||||
install_profiles
|
||||
Faut-il installer les profils pour l'utilisateur courant dans
|
||||
~/etc
|
||||
profiledir Répertoire source pour les fichiers à copier dans ~/etc/profile.d
|
||||
bashrcdir Répertoire source pour les fichiers à copier dans ~/etc/bashrc.d
|
||||
defaultdir Répertoire source pour les fichiers à copier dans ~/etc/default.d
|
||||
copy_files Faut-il copier les fichiers sources dans le répertoire de
|
||||
destination? Les fichiers sources et le répertoire de
|
||||
destination sont calculés à partir des valeurs des variables
|
||||
\$srcdir, \$files, \$destdir
|
||||
srcdir Si \$copy_files==true, répertoire source pour la copie des fichiers.
|
||||
files Liste de fichiers à copier, exprimés par rapport à srcdir.
|
||||
Si ce tableau est vide, tout le répertoire courant est déployé
|
||||
et écrase la destination. Sinon, le répertoire de destination
|
||||
n'est pas écrasé et seuls les fichiers mentionnés sont copiés.
|
||||
destdir Répertoire de base pour la copie des fichiers. Le répertoire de
|
||||
destination proprement dit est \$destdir/\$dirname où \$dirname est
|
||||
le nom de base de ce répertoire si \$files est un tableau
|
||||
vide. Sinon, la destination est \$destdir. \$dest contient le
|
||||
répertoire de destination effectif.
|
||||
owner Propriétaire et groupe des fichiers après le déploiement. Le
|
||||
propriétaire et le groupe sont appliqués de façon récursive à tous
|
||||
les fichiers déployés.
|
||||
modes Liste de modes pour les fichiers après le déploiement. Le
|
||||
premier élément de ce tableau contient les modes à appliquer de
|
||||
façon récursive à tous les fichiers déployés. Les éléments suivants
|
||||
doivent être de la forme path:mode, où path est un chemin relatif à
|
||||
\$dest. Par contre, dans ce cas la modification du mode ne se fait
|
||||
pas de manière récursive, et il faut spécifier chaque fichier
|
||||
concerné séparément.
|
||||
root_scripts
|
||||
Liste de scripts de configuration à lancer après le déploiement,
|
||||
avec les droits de root. Si des fichiers sont copiés pendant le
|
||||
déploiement, les scripts sont lancés dans le répertoire de
|
||||
destination."
|
||||
}
|
||||
|
||||
source "$(dirname "$0")/ulib/ulib" &&
|
||||
urequire DEFAULTS udir ||
|
||||
exit 1
|
||||
|
||||
action=auto
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
--help-vars '$exit_with display_help_vars' \
|
||||
-u,--update action=update \
|
||||
-i,--show-desc action=desc \
|
||||
--show-note action=desc:note \
|
||||
-d,--dump action=dump \
|
||||
-x,--eval action=eval \
|
||||
-e,--edit action=edit \
|
||||
--local-vars local_vars \
|
||||
-A,--all-parents all_parents \
|
||||
--local-only local_only \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
function check_dir() { [ -d "$1" ] || die "$1: Répertoire non trouvé"; }
|
||||
|
||||
[ -z "$all_parents" -a -z "$local_only" ] && local_only=1
|
||||
[ -z "$*" -a "$action" == "auto" ] && action=desc
|
||||
[ "$action" == "auto" ] && action=update
|
||||
udir="${1:-.}"; shift
|
||||
|
||||
if [ "$action" == "update" ]; then
|
||||
check_dir "$udir"
|
||||
if [ -z "$*" ]; then
|
||||
# pas de variable à mettre à jour, afficher simplement la note si elle existe
|
||||
udir_check "$udir" &&
|
||||
udir_eval "$udir" '[ -n "$udir_note" ] && eecho "$(ppath "$udir"): $udir_note"'
|
||||
else
|
||||
# mettre à jour les variables
|
||||
udir_create_maybe "$udir"
|
||||
udir_update "$udir" "$@"
|
||||
check_verbosity -c && udir_dump "$udir" 1>&2
|
||||
fi
|
||||
|
||||
elif [ "$action" == "desc" ]; then
|
||||
check_dir "$udir"
|
||||
udir_desc=
|
||||
udir_note=
|
||||
udir_ppath="$(ppath "$udir")"
|
||||
if [ "$udir_ppath" == "." ]; then
|
||||
udir_ppath="$(abspath "$udir_ppath")"
|
||||
udir_ppath="$(basename "$udir_ppath")"
|
||||
fi
|
||||
udir_eval "$udir" '
|
||||
if [ -n "$udir_desc" -o -n "$udir_note" ]; then
|
||||
eecho "$udir_ppath: $udir_desc"
|
||||
[ -n "$udir_note" ] && estepe "$udir_note"
|
||||
fi
|
||||
'
|
||||
|
||||
elif [ "$action" == "desc:note" ]; then
|
||||
check_dir "$udir"
|
||||
udir_note=
|
||||
udir_eval "$udir" '
|
||||
maxi="${COLUMNS:-80}"
|
||||
line0="== $(basename "$PWD") "
|
||||
line1=
|
||||
while [ ${#line0} -lt $maxi ]; do line0="$line0="; done
|
||||
while [ ${#line1} -lt $maxi ]; do line1="$line1="; done
|
||||
if [ -n "$udir_note" ]; then
|
||||
eecho "$COULEUR_ROUGE$line0$COULEUR_NORMALE
|
||||
$udir_note
|
||||
$COULEUR_ROUGE$line1$COULEUR_NORMALE"
|
||||
fi
|
||||
'
|
||||
|
||||
elif [ "$action" == "dump" ]; then
|
||||
[ -n "$local_vars" ] && opts=(-l) || opts=()
|
||||
check_dir "$udir"
|
||||
if [ -n "$all_parents" ]; then
|
||||
udir_dump_all "${opts[@]}" "$udir"
|
||||
elif [ -n "$local_only" ]; then
|
||||
udir_dump "${opts[@]}" "$udir"
|
||||
fi
|
||||
|
||||
elif [ "$action" == "eval" ]; then
|
||||
check_dir "$udir"
|
||||
if [ -n "$all_parents" ]; then
|
||||
udir_eval_all "$udir" "$@"
|
||||
elif [ -n "$local_only" ]; then
|
||||
udir_eval "$udir" "$@"
|
||||
fi
|
||||
|
||||
elif [ "$action" == "edit" ]; then
|
||||
check_dir "$udir"
|
||||
udir_edit "$udir"
|
||||
fi
|
||||
Reference in New Issue
Block a user