ajouter conf_install pour installer les fichiers de configuration dans un répertoire standardisé

This commit is contained in:
Jephté Clain 2017-09-14 23:11:26 +04:00
parent 0372a5c44c
commit a916180ef2
2 changed files with 49 additions and 2 deletions

View File

@ -111,7 +111,15 @@ function copy_update_ask() {
# Copier ou mettre à jour le fichier $1 vers le fichier $2.
# Si le fichier existe déjà, la différence est affichée, et une confirmation
# est demandée pour l'écrasement du fichier.
# si $1 commence par '-' alors on s'en sert comme option pour configurer le
# niveau d'interaction pour demander la confirmation. les paramètres sont
# alors décalés
# Retourner vrai si le fichier a été copié sans erreur.
local interopt=-c
if [[ "$1" == -* ]]; then
interopt="$1"
shift
fi
local src="$1" dest="$2"
[ -d "$dest" ] && dest="$dest/$(basename -- "$src")"
@ -119,10 +127,14 @@ function copy_update_ask() {
[ -f "$dest" ] || copy_replace "$src" "$dest"
if testdiff "$src" "$dest"; then
diff -u "$dest" "$src"
if ask_yesno -c "Voulez-vous remplacer $(ppath "$dest") par la nouvelle version?" C; then
check_interaction "$interopt" && diff -u "$dest" "$src"
if ask_yesno "$interopt" "Voulez-vous remplacer $(ppath "$dest") par la nouvelle version?" C; then
copy_replace "$src" "$dest" "$3"
return $?
elif ! check_interaction "$interopt"; then
ewarn "Les mises à jours suivantes sont disponibles:"
diff -u "$dest" "$src"
ewarn "Le fichier $(ppath "$dest") n'a pas été mis à jour"
fi
fi
return 1

View File

@ -2,6 +2,7 @@
## Gestion de fichiers de configuration et de répertoires de configuration
##@cooked nocomments
uprovide multiconf
urequire install
function conf_local() {
# afficher les commandes pour définir comme locales les variables utilisées
@ -145,3 +146,37 @@ function conf_load_files() {
done
done
}
function conf_install() {
# USAGE: conf_install DEST SRCS...
# installer les fichiers de SRCS dans le répertoire standardisé DEST
# ## destination
# - si DEST est un nom sans chemin, e.g NAME, alors la destination est
# ~/etc/NAME.d
# - si DEST est un nom avec chemin, alors la valeur est prise telle quelle
# comme destination, et le répertoire est créé le cas échéant.
# Si un fichier existe déjà dans la destination, afficher une demande de
# confirmation avant de l'écraser
# ## source
# - si SRC est un fichier, le prendre tel quel
# - si SRC est un répertoire, prendre tous les fichiers SRC/*.conf
# - si SRC est un pattern, prendre tous les fichiers correspondant
local -a srcs
local src dir wc
local dest="$1"; shift
[[ "$dest" == */* ]] || dest="$HOME/etc/$dest.d"
mkdir -p "$dest" || return 1
for src in "$@"; do
if [ -f "$src" ]; then
srcs=("$src")
elif [ -d "$src" ]; then
array_lsfiles srcs "$src" "*.conf"
else
splitwcs "$src" dir wc
array_lsfiles srcs "$dir" "$wc"
fi
for src in "${srcs[@]}"; do
copy_update_ask -y "$src" "$dest"
done
done
}