ajouter conf_install pour installer les fichiers de configuration dans un répertoire standardisé
This commit is contained in:
parent
0372a5c44c
commit
a916180ef2
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue