##@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 if [ -z "$ULIB_INSTALL_CONFIGURED" ]; then # Faut-il afficher le nom des fichiers copié/créés? export ULIB_INSTALL_VERBOSE=1 # Faut-il afficher les destinations avec ppath? export ULIB_INSTALL_USES_PPATH= fi export ULIB_INSTALL_CONFIGURED=1 function ensure_exists() { # Créer le fichier vide "$1" s'il n'existe pas déjà, avec les permissions # $2(=644). retourner vrai si le fichier a été créé sans erreur [ -f "$1" ] || { if [ -n "$ULIB_INSTALL_VERBOSE" ]; then if [ -n "$ULIB_INSTALL_USES_PPATH" ]; then estep "$(ppath "$1")" else estep "$1" fi fi mkdirof "$1" local r=0 touch "$1" && chmod "${2:-644}" "$1" || r=$? return $r } return 1 } function __ulib_install_show_args() { if [ -z "$ULIB_INSTALL_VERBOSE" ]; then : elif [ -n "$ULIB_INSTALL_USES_PPATH" ]; then estep "$1 --> $(ppath "$2")${3:+/}" else estep "$1 --> $2${3:+/}" fi } function copy_replace() { # Copier de façon inconditionnelle le fichier $1 vers le fichier $2, en # réinitialisation les permissions à la valeur $3 local src="$1" dest="$2" local srcname="$(basename -- "$src")" [ -d "$dest" ] && dest="$dest/$srcname" mkdirof "$dest" || return 1 if [ -n "$ULIB_INSTALL_VERBOSE" ]; then local destarg destname slash destarg="$(dirname -- "$dest")" destname="$(basename -- "$dest")" if [ "$srcname" == "$destname" ]; then slash=1 else destarg="$destarg/$destname" fi __ulib_install_show_args "$srcname" "$destarg" "$slash" fi local r=0 if cp "$src" "$dest"; then if [ -n "$3" ]; then chmod "$3" "$dest" || r=$? fi fi return $r } function copy_new() { # Copier le fichier "$1" vers le fichier "$2", avec les permissions $3(=644) # 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" "$3" 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. Réinitialiser le cas échéant les # permissions à la valeur $3 # 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" "$3" elif testdiff "$src" "$dest"; then copy_replace "$src" "$dest" "$3" 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" "$3" 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 __ulib_install_show_args "$(basename -- "$2")" "$(dirname -- "$1")" ln -s "$1" "$2" }