128 lines
3.6 KiB
Bash
128 lines
3.6 KiB
Bash
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
## Des outils de haut niveau pour installer des fichiers de configuration
|
|
##@cooked nocomments
|
|
##@require base
|
|
uprovide install
|
|
urequire base
|
|
|
|
# Faut-il afficher le nom des fichiers copié/créés?
|
|
INSTALL_VERBOSE=1
|
|
# Faut-il afficher les destinations avec ppath?
|
|
INSTALL_USES_PPATH=
|
|
|
|
function ensure_exists() {
|
|
# créer le fichier vide "$1" s'il n'existe pas déjà. retourner vrai si le
|
|
# fichier a été créé sans erreur
|
|
[ -f "$1" ] || {
|
|
if [ -n "$INSTALL_VERBOSE" ]; then
|
|
if [ -n "$INSTALL_USES_PPATH" ]; then
|
|
estep "$(ppath "$1")"
|
|
else
|
|
estep "$1"
|
|
fi
|
|
fi
|
|
mkdirof "$1"
|
|
touch "$1"
|
|
return $?
|
|
}
|
|
return 1
|
|
}
|
|
|
|
function copy_replace() {
|
|
# Copier de façon inconditionnelle le fichier $1 vers le fichier $2
|
|
local src="$1" dest="$2"
|
|
local srcname="$(basename "$src")"
|
|
|
|
[ -d "$dest" ] && dest="$dest/$srcname"
|
|
mkdirof "$dest" || return 1
|
|
|
|
if [ -n "$INSTALL_VERBOSE" ]; then
|
|
local msg destname
|
|
if [ -n "$INSTALL_USES_PPATH" ]; then
|
|
msg="$srcname --> $(ppath "$(dirname "$dest")")/"
|
|
else
|
|
msg="$srcname --> $(dirname "$dest")/"
|
|
fi
|
|
destname="$(basename "$dest")"
|
|
[ "$srcname" == "$destname" ] || msg="$msg$destname"
|
|
estep "$msg"
|
|
fi
|
|
cp "$src" "$dest"
|
|
}
|
|
|
|
function copy_new() {
|
|
# copier le fichier "$1" vers le fichier "$2"
|
|
# Ne pas écraser le fichier destination s'il existe déjà
|
|
# Retourner vrai si le fichier a été copié sans erreur
|
|
local src="$1" dest="$2"
|
|
|
|
[ -d "$dest" ] && dest="$dest/$(basename "$src")"
|
|
mkdirof "$dest" || return 1
|
|
|
|
if [ ! -e "$dest" ]; then
|
|
copy_replace "$src" "$dest"
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function copy_update() {
|
|
# copier le fichier "$1" vers le fichier "$2", si $2 n'existe pas, ou si $1
|
|
# a été modifié par rapport à $2.
|
|
# Retourner vrai si le fichier a été copié sans erreur.
|
|
local src="$1" dest="$2"
|
|
|
|
[ -d "$dest" ] && dest="$dest/$(basename "$src")"
|
|
mkdirof "$dest" || return 1
|
|
|
|
if [ ! -e "$dest" ]; then
|
|
copy_replace "$src" "$dest"
|
|
elif testdiff "$src" "$dest"; then
|
|
copy_replace "$src" "$dest"
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
|
|
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.
|
|
# Retourner vrai si le fichier a été copié sans erreur.
|
|
local src="$1" dest="$2"
|
|
|
|
[ -d "$dest" ] && dest="$dest/$(basename "$src")"
|
|
mkdirof "$dest" || return 1
|
|
|
|
[ -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
|
|
copy_replace "$src" "$dest"
|
|
return $?
|
|
fi
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
function copy_tree() {
|
|
# Copier de façon inconditionnelle l'arborescence $1 dans l'arborescence $2
|
|
local srcdir="$1" destdir="$2"
|
|
mkdir -p "$destdir" || return 1
|
|
cpdirnovcs "$srcdir" "$destdir"
|
|
}
|
|
|
|
function link_new() {
|
|
# Si $2 n'existe pas, créer le lien symbolique $2 pointant vers $1
|
|
[ -e "$2" ] && return 0
|
|
if [ -n "$INSTALL_VERBOSE" ]; then
|
|
if [ -n "$INSTALL_USES_PPATH" ]; then
|
|
estep "$(basename "$2") --> $(ppath "$(dirname "$1")")"
|
|
else
|
|
estep "$(basename "$2") --> $(dirname "$1")"
|
|
fi
|
|
fi
|
|
ln -s "$1" "$2"
|
|
}
|