uinst installe maintenant les profils en mode partagé par défaut

This commit is contained in:
Jephté Clain 2015-07-22 15:04:58 +04:00
parent fb6b492d5c
commit 0f5b5720c2
8 changed files with 106 additions and 31 deletions

8
bashrc
View File

@ -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

View File

@ -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=

View File

@ -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

View File

@ -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() {
if [ "$1" == --local-profiles ]; then
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}"
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,19 +281,25 @@ 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
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
envsrc="$envsrcdir/$envfile"
envdest="$envdestdir/$envfile"
shadest="$shadestdir/$envfile"
if [ ! -f "$envdest" -a -f "$shadest" ]; then
@ -287,6 +308,9 @@ function uenv_install_profiles() {
envdest="$shadest"
fi
fi
else
envdest="$envdestdir/$envfile"
fi
local actual_envdestdir="$(dirname -- "$envdest")"
if [ ! -f "$envdest" ]; then

View File

@ -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

View File

@ -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

View File

@ -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

19
uenv
View File

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