##@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" [ -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" }