From 07383052cac2f52ed79f2f5b5c02b38d67cbad14 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Fri, 9 Jan 2015 10:33:42 +0400 Subject: [PATCH] =?UTF-8?q?ajout=20de=20workdir=5Fexcludes=20et=20workdir?= =?UTF-8?q?=5Fincludes,=20particuli=C3=A8rement=20utile=20avec=20copy=5Ffi?= =?UTF-8?q?les=3Dfalse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/uinst | 29 +++++++++++++++++++++++++---- udir | 8 ++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/lib/ulib/uinst b/lib/ulib/uinst index 0ebbe65..5b15921 100644 --- a/lib/ulib/uinst +++ b/lib/ulib/uinst @@ -43,6 +43,8 @@ function uinst() { local profiledir local bashrcdir local defaultdir + local workdir_excludes + local workdir_includes local copy_files local destdir local srcdir @@ -180,6 +182,8 @@ function __uinst_init() { profiledir='lib/profile.d' bashrcdir='lib/bashrc.d' defaultdir='lib/default' + workdir_excludes='()' + workdir_includes='()' copy_files='true' destdir='/usr/local' srcdir='.' @@ -361,7 +365,7 @@ Utilisez 'udir -e $(ppath "$srcdir")' pour modifier les paramètres." function __uinst_defaultvars() { eval "$(array_join UINST_DEFAULTS ';')" UDIR_VARS=(uinc install_profiles profiledir bashrcdir defaultdir copy_files destdir srcdir owner) - UDIR_ARRAYS=(uinc_options uinc_args preconfig_scripts configure_variables configure_dest_for config_scripts files modes root_scripts) + UDIR_ARRAYS=(uinc_options uinc_args preconfig_scripts configure_variables configure_dest_for config_scripts workdir_excludes workdir_includes files modes root_scripts) } function __uinst_protectvars() { @@ -594,11 +598,28 @@ function __uinst_prepare_workdir() { # Faire une copie de travail de $srcdir dans $1 # srcdir est modifié pour devenir la nouvelle valeur local srcname="$(basename "$srcdir")" + local destdir="$1/$srcname" estep "Création d'une copie de travail dans $1..." - "${UINST_COPY_METHOD:-cpnovcs}" "$srcdir" "$1/$srcname" - - srcdir="$1/$srcname" + if [ ${#workdir_excludes[*]} -gt 0 -o ${#workdir_includes[*]} ]; then + # on a spécifié des inclusions ou exclusions pour le répertoire de + # travail + ( + for exclude in "${workdir_excludes[@]}"; do + array_add __CPNOVCS_RSYNC_ARGS --exclude "$exclude" + done + for include in "${workdir_includes[@]}"; do + array_add __CPNOVCS_RSYNC_ARGS --include "$include" + done + cd "$srcdir" + "${UINST_COPY_METHOD:-cpdirnovcs}" . "$destdir" + ) + else + # copie simple du répertoire de travail + "${UINST_COPY_METHOD:-cpdirnovcs}" "$srcdir" "$destdir" + fi + + srcdir="$destdir" chmod -R +w "$srcdir" || return 1 return 0 } diff --git a/udir b/udir index 1ac2c12..9715134 100755 --- a/udir +++ b/udir @@ -87,6 +87,14 @@ install_profiles profiledir Répertoire source pour les fichiers à copier dans ~/etc/profile.d bashrcdir Répertoire source pour les fichiers à copier dans ~/etc/bashrc.d defaultdir Répertoire source pour les fichiers à copier dans ~/etc/default.d +workdir_excludes +workdir_includes + Fichiers à exclure (resp. inclure) pour construire le répertoire de + travail avec uinst. C'est à partir du répertoire de travail que sont + déployés les fichiers. + La copie se faisant avec rsync, workdir_excludes spécifie les + fichiers à exclure. workdir_includes permet de forcer l'inclusion de + fichiers qui seraient exclus autrement. copy_files Faut-il copier les fichiers sources dans le répertoire de destination? Les fichiers sources et le répertoire de destination sont calculés à partir des valeurs des variables