From 0f5b5720c243ffc78806f2c63e1772a69c5331d8 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 22 Jul 2015 15:04:58 +0400 Subject: [PATCH] =?UTF-8?q?uinst=20installe=20maintenant=20les=20profils?= =?UTF-8?q?=20en=20mode=20partag=C3=A9=20par=20d=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bashrc | 8 +++++- lib/nutoolsrc | 3 ++ lib/uinst/conf | 9 ++++++ lib/ulib/uenv_update | 68 ++++++++++++++++++++++++++++++-------------- lib/ulib/uinst | 17 +++++++++-- nutools | 6 +++- profile | 7 ++++- uenv | 19 ++++++++++--- 8 files changed, 106 insertions(+), 31 deletions(-) diff --git a/bashrc b/bashrc index bca2482..9b566ae 100644 --- a/bashrc +++ b/bashrc @@ -1,6 +1,12 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +[ -f ~/.nutoolsrc ] && . ~/.nutoolsrc + function uprovide() { :; } source @@dest@@/lib/ulib/uenv || return -__uenv_source_dirs @@dest@@/bashrc.d "$HOME/etc/bashrc.${HOSTNAME%%.*}.d" +if [ -n "$UTOOLS_LOCAL_PROFILES" ]; then + __uenv_source_dirs @@dest@@/bashrc.d "$HOME/etc/bashrc.${HOSTNAME%%.*}.d" +else + __uenv_source_dirs @@dest@@/bashrc.d "$HOME/etc/bashrc.d" +fi __uenv_cleanup diff --git a/lib/nutoolsrc b/lib/nutoolsrc index d65d4cc..a503f2a 100644 --- a/lib/nutoolsrc +++ b/lib/nutoolsrc @@ -12,3 +12,6 @@ #export UTOOLS_BITS=32 #export UTOOLS_MYSYSDIST="debian debianlike" #export UTOOLS_MYSYSVER="squeeze" + +# Type d'installation pour les profils +#export UTOOLS_LOCAL_PROFILES= diff --git a/lib/uinst/conf b/lib/uinst/conf index 97ec601..0cf299a 100644 --- a/lib/uinst/conf +++ b/lib/uinst/conf @@ -42,6 +42,15 @@ bcdir=lib/completion.d # copier le fichier .nutoolsrc [ -f ~/.nutoolsrc ] || cp lib/nutoolsrc ~/.nutoolsrc +if ! quietgrep UTOOLS_LOCAL_PROFILES= ~/.nutoolsrc; then + echo " +# Type d'installation pour les profils +#export UTOOLS_LOCAL_PROFILES=" >>~/.nutoolsrc +fi +if [ "$UINST_LOCAL_PROFILES" != auto ]; then + sedi "/UTOOLS_LOCAL_PROFILES=/c\\ +export UTOOLS_LOCAL_PROFILES=$(qvalr "$UINST_LOCAL_PROFILES")" ~/.nutoolsrc +fi # identification du système echo "##@before *" >lib/profile.d/0nutools diff --git a/lib/ulib/uenv_update b/lib/ulib/uenv_update index 4a7a01b..c2acdc1 100644 --- a/lib/ulib/uenv_update +++ b/lib/ulib/uenv_update @@ -129,6 +129,7 @@ function uenv_update_dir() { local __myhostname="$MYHOSTNAME" >"$sio" for dir in "$@"; do + [ -n "$dir" ] || continue for file in "$dir/"*; do [ -f "$file" ] || continue files=("${files[@]}" "$file") @@ -188,13 +189,22 @@ function uenv_update_dir() { } function uenv_set_destdirs() { - local hostname="${HOSTNAME%%.*}" - shared_profiledestdir="$HOME/etc/profile.d" - shared_bashrcdestdir="$HOME/etc/bashrc.d" - shared_defaultdestdir="$HOME/etc/default" - profiledestdir="$HOME/etc/profile.${hostname}.d" - bashrcdestdir="$HOME/etc/bashrc.${hostname}.d" - defaultdestdir="$HOME/etc/default.${hostname}" + if [ "$1" == --local-profiles ]; then + local hostname="${HOSTNAME%%.*}" + profiledestdir="$HOME/etc/profile.${hostname}.d" + bashrcdestdir="$HOME/etc/bashrc.${hostname}.d" + defaultdestdir="$HOME/etc/default.${hostname}" + shared_profiledestdir="$HOME/etc/profile.d" + shared_bashrcdestdir="$HOME/etc/bashrc.d" + shared_defaultdestdir="$HOME/etc/default" + else + profiledestdir="$HOME/etc/profile.d" + bashrcdestdir="$HOME/etc/bashrc.d" + defaultdestdir="$HOME/etc/default" + shared_profiledestdir= + shared_bashrcdestdir= + shared_defaultdestdir= + fi } function uenv_sourced_in() { @@ -253,12 +263,17 @@ cas, il faut décommenter la ligne dans ~/.bash_profile qui source ~/.profile" } function uenv_install_profiles() { + local local_profiles + if [ "$1" == --local-profiles ]; then + local_profiles=1 + shift + fi local projdir="$1" profiledir="$2" bashrcdir="$3" defaultdir="$4" - local tmpfile + local tmpfile shared local prefix envsrcdir envdestdir shadestdir envfiles envfile envsrc envdest shadest local shared_profiledestdir shared_bashrcdestdir shared_defaultdestdir local profiledestdir bashrcdestdir defaultdestdir - uenv_set_destdirs + uenv_set_destdirs ${local_profiles:+--local-profiles} ac_set_tmpfile tmpfile for prefix in profile bashrc default; do @@ -266,26 +281,35 @@ function uenv_install_profiles() { envdestdir="${prefix}destdir"; envdestdir="${!envdestdir}" shadestdir="shared_${prefix}destdir"; shadestdir="${!shadestdir}" [ -n "$envsrcdir" -a -d "$envsrcdir" ] || continue - mkdir -p "$envdestdir" "$shadestdir" + mkdir -p "$envdestdir" + [ -n "$shadestdir" ] && mkdir -p "$shadestdir" array_from_lines envfiles "$(list_files "$envsrcdir")" for envfile in "${envfiles[@]}"; do + envsrc="$envsrcdir/$envfile" if [ "${envfile%.shared}" != "$envfile" ]; then - # Avec l'extension .shared, toujours installer dans le - # répertoire des profils partagés - envsrc="$envsrcdir/$envfile" envfile="${envfile%.shared}" - shadest="$shadestdir/$envfile" - envdest="$shadest" + shared=1 else - envsrc="$envsrcdir/$envfile" - envdest="$envdestdir/$envfile" - shadest="$shadestdir/$envfile" - if [ ! -f "$envdest" -a -f "$shadest" ]; then - # Si déjà installé en partagé, continuer à mettre à jour ce - # fichier-là - envdest="$shadest" + shared= + fi + + if [ -n "$shadestdir" ]; then + if [ -n "$shared" ]; then + # si fichier partagé, toujours le copier dans le répertoire + # des fichiers partagés + envdest="$shadestdir/$envfile" + else + envdest="$envdestdir/$envfile" + shadest="$shadestdir/$envfile" + if [ ! -f "$envdest" -a -f "$shadest" ]; then + # Si déjà installé en partagé, continuer à mettre à jour ce + # fichier-là + envdest="$shadest" + fi fi + else + envdest="$envdestdir/$envfile" fi local actual_envdestdir="$(dirname -- "$envdest")" diff --git a/lib/ulib/uinst b/lib/ulib/uinst index fdcde16..c5c3bfa 100644 --- a/lib/ulib/uinst +++ b/lib/ulib/uinst @@ -17,6 +17,7 @@ function uinst() { # l'environnement de l'appelant. local UINST_CONFIGURE_FORCE local UINST_COPY_METHOD + local UINST_LOCAL_PROFILES local -a UINST_DEFAULTS local -a UINST_CONFIG_VARS local -a UINST_CONFIG_VARCMDS @@ -90,6 +91,11 @@ OPTIONS --include-vcs Inclure les fichiers de VCS dans les fichiers copiés. Par défaut, les fichiers de VCS sont exclus. + -l, --local-profiles + Installer les profils locaux comme tels + --shared-profiles + Installer les profils locaux comme des profils partagés. C'est la valeur + par défaut pour compatibilité. -C Configurer un répertoire pour le déploiement avec uinst Ajouter l'option --force pour forcer la reconfiguration" } @@ -131,6 +137,8 @@ OPTIONS --prefix UINST_AUTOPREFIX=1 \ --no-prefix UINST_AUTOPREFIX= \ --include-vcs UINST_COPY_METHOD=cpdir \ + -l,--local-profiles UINST_LOCAL_PROFILES=1 \ + --shared-profiles UINST_LOCAL_PROFILES= \ -C UINST_ACTION=configure \ -f,--force UINST_CONFIGURE_FORCE=1 \ --prepare-1s: UINST_PREPARE_DIR \ @@ -171,6 +179,7 @@ OPTIONS function __uinst_init() { UINST_CONFIGURE_FORCE= UINST_COPY_METHOD="${UINST_COPY_METHOD:-cpdirnovcs}" + UINST_LOCAL_PROFILES="${UTOOLS_LOCAL_PROFILES:-auto}" UINST_DEFAULTS=( uinc='release' uinc_options='()' @@ -774,6 +783,7 @@ function __uinst_udir2s() { for __uinst_var in "${__uinst_arrays[@]}"; do set_array_cmd "$__uinst_var" >>"$__uinst_config" done + set_var_cmd "UINST_LOCAL_PROFILES" "$UINST_LOCAL_PROFILES" >>"$__uinst_config" set_var_cmd "UINST_ISTMPDIR" "$UINST_ISTMPDIR" >>"$__uinst_config" set_var_cmd "UINST_ORIGSRC" "$UINST_ORIGSRC" >>"$__uinst_config" set_var_cmd "UINST_SRCDIR" "$UINST_SRCDIR" >>"$__uinst_config" @@ -858,8 +868,11 @@ function __uinst_udir2s() { ## Installer les profils if is_yes "$install_profiles"; then urequire uenv uenv_update - etitle "Installation des profils" \ - uenv_install_profiles "$srcdir" "$profiledir" "$bashrcdir" "$defaultdir" + etitle "Installation des profils" + local local_profiles="$UINST_LOCAL_PROFILES" + [ "$local_profiles" == auto ] && local_profiles= + uenv_install_profiles ${local_profiles:+--local-profiles} "$srcdir" "$profiledir" "$bashrcdir" "$defaultdir" + eend fi ## Déploiement diff --git a/nutools b/nutools index ef784c2..a405a72 100755 --- a/nutools +++ b/nutools @@ -12,6 +12,8 @@ USAGE OPTIONS -C, --configure Faire la configuration pour l'utilisateur courant en appelant uenv -u + Avec cette option, l'option -l (ou --local-profiles) est aussi reconnue + et est passée directement à uenv -v, --version Afficher la version de nutools installée. C'est l'option par défaut -c, --check @@ -33,10 +35,12 @@ OPTIONS } action=show +local_profiles= coper= args=( --help '$exit_with display_help' -C,--configure action=configure + -l,--local-profiles local_profiles=1 -v,--version action=show -c,--check action=check -o:,--oper:,--op: '$action=check; set@ coper' @@ -53,7 +57,7 @@ parse_args "$@"; set -- "${args[@]}" case "$action" in configure) - "$scriptdir/uenv" -u + "$scriptdir/uenv" -u ${local_profiles:+--local-profiles} ;; show) setx nutoolsver="$scriptdir/pver" -F "$scriptdir/VERSION.txt" --show diff --git a/profile b/profile index 7311591..0207aec 100644 --- a/profile +++ b/profile @@ -1,8 +1,13 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +[ -f ~/.nutoolsrc ] && . ~/.nutoolsrc [ -z "$USER" -a -n "$LOGNAME" ] && export USER="$LOGNAME" function uprovide() { :; } source @@dest@@/lib/ulib/uenv || return -__uenv_source_dirs @@dest@@/profile.d "$HOME/etc/profile.${HOSTNAME%%.*}.d" +if [ -n "$UTOOLS_LOCAL_PROFILES" ]; then + __uenv_source_dirs @@dest@@/profile.d "$HOME/etc/profile.${HOSTNAME%%.*}.d" +else + __uenv_source_dirs @@dest@@/profile.d "$HOME/etc/profile.d" +fi __uenv_cleanup diff --git a/uenv b/uenv index 610fa1d..ceab47e 100755 --- a/uenv +++ b/uenv @@ -17,7 +17,7 @@ OPTIONS HOME=/path/to/homedir Spécifier le chemin vers ~ Cette option doit être placée avant les valeurs projdirs. - -u + -u, --update Installer ou mettre à jour les fichiers de profil des projets spécifiés: Les fichiers ~/.profile, ~/.bash_profile et ~/.bashrc sont vérifiés et corriger automatiquement pour inclure les fichiers de nutools. @@ -26,12 +26,23 @@ OPTIONS Les projets spécifiés *doivent* être configurés avec uinst -C, et définir la valeur install_profiles=true dans leur fichier .udir Si aucun projet n'est spécifié, prendre les fichiers de profil de - nutools." + nutools. + -l, --local-profiles + Avec l'option -u, installer les profils locaux comme tels. Pour les + fichiers de profil qui sont indiqués comme non partagés, les copier dans + des répertoires spécifiques de la forme {profile,bashrc}.HOSTNAME.d et + default.HOSTNAME + -s, --shared-profiles + Installer les profils locaux comme des profils partagés. C'est l'option + par défaut." } +local_profiles="$UTOOLS_LOCAL_PROFILES" parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ - -u update \ + -u,--update update=1 \ + -l,--local-profiles local_profiles=1 \ + -s,--shared-profiles local_profiles= \ @ args -- "$@" && set -- "${args[@]}" || die "$args" if [[ "$1" == HOME=* ]]; then @@ -40,7 +51,7 @@ if [[ "$1" == HOME=* ]]; then shift fi -uenv_set_destdirs +uenv_set_destdirs ${local_profiles:+--local-profiles} if [ ! -d "$profiledestdir" -o ! -d "$bashrcdestdir" -o ! -d "$defaultdestdir" ]; then # forcer la maj si un des répertoires ~/etc/{profile.d,bashrc.d,default}