les répertoires de profil sont spécifiques au nom de la machine

This commit is contained in:
Jephté Clain 2015-06-22 00:47:43 +04:00
parent 80a98e6ce7
commit c43cda0f4e
5 changed files with 38 additions and 16 deletions

2
bashrc
View File

@ -2,5 +2,5 @@
function uprovide() { :; } function uprovide() { :; }
source @@dest@@/lib/ulib/uenv || return source @@dest@@/lib/ulib/uenv || return
__uenv_source_dirs @@dest@@/bashrc.d "$HOME/etc/bashrc.d" __uenv_source_dirs @@dest@@/bashrc.d "$HOME/etc/bashrc.d" "$HOME/etc/${HOSTNAME%%.*}-bashrc.d"
__uenv_cleanup __uenv_cleanup

View File

@ -23,16 +23,16 @@ function __uenv_check_file() {
# tester si le fichier est spécifique à une machine # tester si le fichier est spécifique à une machine
local host local host
host="$(expr "$file" : ".*\\.on_\\([^.]*\\)")" host="$(expr "$file" : ".*\\.host-\\([^.]*\\)")"
[ -n "$host" -a "$host" != "$__myhostname" ] && return 1 [ -n "$host" -a "$host" != "$__myhostname" ] && return 1
host="$(expr "$file" : ".*\\.noton_\\([^.]*\\)")" host="$(expr "$file" : ".*\\.nothost-\\([^.]*\\)")"
[ -n "$host" -a "$host" == "$__myhostname" ] && return 1 [ -n "$host" -a "$host" == "$__myhostname" ] && return 1
# tester si le fichier est spécifique à un utilisateur # tester si le fichier est spécifique à un utilisateur
local user local user
user="$(expr "$file" : ".*\\.for_\\([^.]*\\)")" user="$(expr "$file" : ".*\\.user-\\([^.]*\\)")"
[ -n "$user" -a "$user" != "$USER" ] && return 1 [ -n "$user" -a "$user" != "$USER" ] && return 1
user="$(expr "$file" : ".*\\.notfor_\\([^.]*\\)")" user="$(expr "$file" : ".*\\.notuser-\\([^.]*\\)")"
[ -n "$user" -a "$user" == "$USER" ] && return 1 [ -n "$user" -a "$user" == "$USER" ] && return 1
return 0 return 0
@ -57,7 +57,7 @@ function __uenv_source_dirs() {
source "$sio" source "$sio"
else else
for file in "$dir/"*; do for file in "$dir/"*; do
if __uenv_check_file "$(dirname "$file")" "$(basename "$file")"; then if __uenv_check_file "$(dirname -- "$file")" "$(basename -- "$file")"; then
source "$file" source "$file"
fi fi
done done

View File

@ -119,6 +119,7 @@ function uenv_update_dir() {
local __myhostname="$MYHOSTNAME" local __myhostname="$MYHOSTNAME"
>"$sio" >"$sio"
for file in "$dir/"*; do for file in "$dir/"*; do
[ -f "$file" ] || continue
file="$(basename "$file")" file="$(basename "$file")"
files=("${files[@]}" "$file") files=("${files[@]}" "$file")
__uenv_check_file "$dir" "$file" && echo "$file" >>"$sio" __uenv_check_file "$dir" "$file" && echo "$file" >>"$sio"
@ -156,9 +157,13 @@ function uenv_update_dir() {
} }
function uenv_set_destdirs() { function uenv_set_destdirs() {
profiledestdir="$HOME/etc/profile.d" local hostname="${HOSTNAME%%.*}"
bashrcdestdir="$HOME/etc/bashrc.d" shared_profiledestdir="$HOME/etc/profile.d"
defaultdestdir="$HOME/etc/default" shared_bashrcdestdir="$HOME/etc/bashrc.d"
shared_defaultdestdir="$HOME/etc/default"
profiledestdir="$HOME/etc/${hostname}-profile.d"
bashrcdestdir="$HOME/etc/${hostname}-bashrc.d"
defaultdestdir="$HOME/etc/${hostname}-default"
} }
function uenv_sourced_in() { function uenv_sourced_in() {
@ -227,23 +232,40 @@ function uenv_install_profiles() {
for prefix in profile bashrc default; do for prefix in profile bashrc default; do
envsrcdir="${prefix}dir"; envsrcdir="$projdir/${!envsrcdir}" envsrcdir="${prefix}dir"; envsrcdir="$projdir/${!envsrcdir}"
envdestdir="${prefix}destdir"; envdestdir="${!envdestdir}" envdestdir="${prefix}destdir"; envdestdir="${!envdestdir}"
shadestdir="shared_${prefix}destdir"; shadestdir="${!shadestdir}"
[ -n "$envsrcdir" -a -d "$envsrcdir" ] || continue [ -n "$envsrcdir" -a -d "$envsrcdir" ] || continue
array_from_lines envfiles "$(list_files "$envsrcdir")" array_from_lines envfiles "$(list_files "$envsrcdir")"
for envfile in "${envfiles[@]}"; do for envfile in "${envfiles[@]}"; do
envsrc="$envsrcdir/$envfile" envsrc="$envsrcdir/$envfile"
envdest="$envdestdir/$envfile" envdest="$envdestdir/$envfile"
shadest="$shadestdir/$envfile"
mkdir -p "$envdestdir" mkdir -p "$envdestdir" "$shadestdir"
if [ ! -f "$envdest" -a -f "$shadest" ]; then
# Si déjà installé en partagé, continuer à mettre à jour ce
# fichier-là
envdest="$shadest"
fi
if [ ! -f "$envdest" ]; then if [ ! -f "$envdest" ]; then
estep "Installation du profil par défaut $envfile dans $(ppath "$envdestdir")" estep "Installation du profil par défaut $envfile dans $(ppath "$envdestdir")"
/bin/cp -f "$envsrc" "$envdestdir" /bin/cp -f "$envsrc" "$envdestdir"
elif [ "$prefix" != "default" ] && ! endswith "$envfile" ".userconf" && testdiff "$envdest" "$envsrc"; then elif [ "$prefix" == "default" ]; then
# ne jamais mettre à jour dans default
if testdiff "$envdest" "$envsrc"; then
estepi "Le profil $(ppath "$envdest") a été conservé"
fi
elif endswith "$envfile" ".userconf"; then
# ne jamais mettre à jour les fichiers .userconf
if testdiff "$envdest" "$envsrc"; then
estepi "Le profil $(ppath "$envdest") a été conservé"
fi
elif testdiff "$envdest" "$envsrc"; then
estep "Le profil par défaut $envfile dans $(ppath "$envdestdir") a été modifié" estep "Le profil par défaut $envfile dans $(ppath "$envdestdir") a été modifié"
if show_info; then if show_info; then
eecho "Voici les différences détectées:" eecho "Voici les différences détectées:"
eecho "" eecho ""
diff -u "$envdest" "$envsrcdir" 1>&2 diff -u "$envdest" "$envsrc" 1>&2
eecho "" eecho ""
fi fi

View File

@ -4,5 +4,5 @@
function uprovide() { :; } function uprovide() { :; }
source @@dest@@/lib/ulib/uenv || return source @@dest@@/lib/ulib/uenv || return
__uenv_source_dirs @@dest@@/profile.d "$HOME/etc/profile.d" __uenv_source_dirs @@dest@@/profile.d "$HOME/etc/profile.d" "$HOME/etc/${HOSTNAME%%.*}-profile.d"
__uenv_cleanup __uenv_cleanup

4
uenv
View File

@ -73,7 +73,7 @@ if [ -n "$update" ]; then
continue continue
fi fi
etitle -s "$(ppath "$projdir")" etitle "$(ppath "$projdir")"
install_profiles=false install_profiles=false
profiledir=lib/profile.d profiledir=lib/profile.d
@ -100,7 +100,7 @@ if [ -n "$update" ]; then
else else
## Mettre uniquement à jour l'ordre de chargement des fichiers ## Mettre uniquement à jour l'ordre de chargement des fichiers
## ~/etc/{profile.d,bashrc.d} ## ~/etc/{profile.d,bashrc.d}
for dir in "$profiledestdir" "$bashrcdestdir"; do for dir in "$shared_profiledestdir" "$shared_bashrcdestdir" "$profiledestdir" "$bashrcdestdir"; do
[ -d "$dir" ] || continue [ -d "$dir" ] || continue
estep "Mise à jour de $(ppath "$dir")" estep "Mise à jour de $(ppath "$dir")"
uenv_update_dir "$dir" "$envsetup_tmpfile" uenv_update_dir "$dir" "$envsetup_tmpfile"