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"
 | |
| }
 |