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
# est équivalent à:
# conf_init VARS...
# conf_find_files __CONF_FILES ~/etc/default/NAME.conf ~/etc/NAME.d/*.conf
# conf_upgrade ~/etc/default/NAME.conf
# conf_find_files __CONF_FILES ~/etc/default/NAME ~/etc/NAME.d/*.conf
# conf_upgrade ~/etc/default/NAME
# conf_load_files "${__CONF_FILES[@]}"
# Pour supporter les scénarii où les fichiers de configuration sont ailleurs
# 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"
[ $# -gt 0 ] && conf_upgrade "$__name.conf"
else
conf_find_files __CONFS_FILES "$HOME/etc/default/$__name.conf" "$HOME/etc/$__name.d/*.conf"
[ $# -gt 0 ] && conf_upgrade "$HOME/etc/default/$__name.conf"
conf_find_files __CONFS_FILES "$HOME/etc/default/$__name" "$HOME/etc/$__name.d/*.conf"
[ $# -gt 0 ] && conf_upgrade "$HOME/etc/default/$__name"
fi
conf_load_files "${__CONFS_FILES[@]}"
}
@ -240,8 +240,9 @@ function conf_load_files() {
}
function conf_install() {
# USAGE: conf_install DEST SRCS...
# installer les fichiers de SRCS dans le répertoire standardisé DEST
# USAGE: conf_install DEST PREFIX SRCS...
# installer les fichiers de SRCS dans le répertoire standardisé DEST avec le
# préfixe PREFIX
# ## destination
# - si DEST est un nom sans chemin, e.g NAME, alors la destination est
# ~/etc/NAME.d
@ -253,24 +254,43 @@ function conf_install() {
# - 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
# 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 dest="$1"; shift
local prefix="$1"; shift
[[ "$dest" == */* ]] || dest="$HOME/etc/$dest.d"
mkdir -p "$dest" || return 1
for src in "$@"; do
if [ -f "$src" ]; then
srcs=("$src")
array_add srcs "$src"
elif [ -d "$src" ]; then
array_lsfiles srcs "$src" "*.conf"
array_lsfiles tmpsrcs "$src" "*.conf"
array_extend srcs tmpsrcs
else
splitwcs "$src" dir wc
array_lsfiles srcs "$dir" "$wc"
array_lsfiles tmpsrcs "$dir" "$wc"
array_extend srcs tmpsrcs
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
copy_update_ask -y "$src" "$dest"
done
done
fi
}
function conf_upgrade() {