ulib/multiconf: améliorer conf_install()

This commit is contained in:
Jephté Clain 2017-10-19 12:11:03 +04:00
parent 6c3ae24a67
commit 9fb19b4cef
1 changed files with 31 additions and 11 deletions

View File

@ -24,8 +24,8 @@ function conf_auto() {
# conf_auto NAME # conf_auto NAME
# est équivalent à: # est équivalent à:
# conf_init VARS... # conf_init VARS...
# conf_find_files __CONF_FILES ~/etc/default/NAME.conf ~/etc/NAME.d/*.conf # conf_find_files __CONF_FILES ~/etc/default/NAME ~/etc/NAME.d/*.conf
# conf_upgrade ~/etc/default/NAME.conf # conf_upgrade ~/etc/default/NAME
# conf_load_files "${__CONF_FILES[@]}" # conf_load_files "${__CONF_FILES[@]}"
# Pour supporter les scénarii où les fichiers de configuration sont ailleurs # Pour supporter les scénarii où les fichiers de configuration sont ailleurs
# que dans ~/etc/default, l'argument NAME peut être un chemin: # que dans ~/etc/default, l'argument NAME peut être un chemin:
@ -43,8 +43,8 @@ function conf_auto() {
conf_find_files __CONFS_FILES "$__name.conf" "$__name.d/*.conf" conf_find_files __CONFS_FILES "$__name.conf" "$__name.d/*.conf"
[ $# -gt 0 ] && conf_upgrade "$__name.conf" [ $# -gt 0 ] && conf_upgrade "$__name.conf"
else else
conf_find_files __CONFS_FILES "$HOME/etc/default/$__name.conf" "$HOME/etc/$__name.d/*.conf" conf_find_files __CONFS_FILES "$HOME/etc/default/$__name" "$HOME/etc/$__name.d/*.conf"
[ $# -gt 0 ] && conf_upgrade "$HOME/etc/default/$__name.conf" [ $# -gt 0 ] && conf_upgrade "$HOME/etc/default/$__name"
fi fi
conf_load_files "${__CONFS_FILES[@]}" conf_load_files "${__CONFS_FILES[@]}"
} }
@ -240,8 +240,9 @@ function conf_load_files() {
} }
function conf_install() { function conf_install() {
# USAGE: conf_install DEST SRCS... # USAGE: conf_install DEST PREFIX SRCS...
# installer les fichiers de SRCS dans le répertoire standardisé DEST # installer les fichiers de SRCS dans le répertoire standardisé DEST avec le
# préfixe PREFIX
# ## destination # ## destination
# - si DEST est un nom sans chemin, e.g NAME, alors la destination est # - si DEST est un nom sans chemin, e.g NAME, alors la destination est
# ~/etc/NAME.d # ~/etc/NAME.d
@ -253,24 +254,43 @@ function conf_install() {
# - si SRC est un fichier, le prendre tel quel # - 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 répertoire, prendre tous les fichiers SRC/*.conf
# - si SRC est un pattern, prendre tous les fichiers correspondant # - si SRC est un pattern, prendre tous les fichiers correspondant
local -a srcs # s'il n'y a qu'une seule source, la destination sera DEST/PREFIX.conf
# sinon, la destination sera DEST/PREFIX-SRCNAME où SRCNAME est le nom du
# fichier source
# si PREFIX est vide, alors les fichiers sont copiés avec leur nom sans
# modification.
local -a tmpsrcs srcs
local src dir wc local src dir wc
local dest="$1"; shift local dest="$1"; shift
local prefix="$1"; shift
[[ "$dest" == */* ]] || dest="$HOME/etc/$dest.d" [[ "$dest" == */* ]] || dest="$HOME/etc/$dest.d"
mkdir -p "$dest" || return 1 mkdir -p "$dest" || return 1
for src in "$@"; do for src in "$@"; do
if [ -f "$src" ]; then if [ -f "$src" ]; then
srcs=("$src") array_add srcs "$src"
elif [ -d "$src" ]; then elif [ -d "$src" ]; then
array_lsfiles srcs "$src" "*.conf" array_lsfiles tmpsrcs "$src" "*.conf"
array_extend srcs tmpsrcs
else else
splitwcs "$src" dir wc splitwcs "$src" dir wc
array_lsfiles srcs "$dir" "$wc" array_lsfiles tmpsrcs "$dir" "$wc"
array_extend srcs tmpsrcs
fi fi
done
[ ${#srcs[*]} -gt 0 ] || return 0
if [ -n "$prefix" ]; then
if [ ${#srcs[*]} -eq 1 ]; then
copy_update_ask -y "$src" "$dest/$prefix.conf"
else
for src in "${srcs[@]}"; do
copy_update_ask -y "$src" "$dest/$prefix-$(basename -- "$srcname")"
done
fi
else
for src in "${srcs[@]}"; do for src in "${srcs[@]}"; do
copy_update_ask -y "$src" "$dest" copy_update_ask -y "$src" "$dest"
done done
done fi
} }
function conf_upgrade() { function conf_upgrade() {