Intégration de la branche release-2.1.0

This commit is contained in:
Jephté Clain 2015-06-22 10:25:29 +04:00
commit 79df3907b6
23 changed files with 127 additions and 68 deletions

2
.udir
View File

@ -18,7 +18,7 @@ kvm_service=
openvz_service= openvz_service=
configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service) configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service)
configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools lib/bashrc.d/bash_completion lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init) configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools.shared lib/bashrc.d/bash_completion.shared lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init)
config_scripts=(lib/uinst/conf lib/uinst/system_caps.legacy) config_scripts=(lib/uinst/conf lib/uinst/system_caps.legacy)
install_profiles=true install_profiles=true
profiledir=lib/profile.d profiledir=lib/profile.d

View File

@ -1,3 +1,11 @@
## Version 2.1.0 du 22/06/2015-10:25
2a3eb76 Intégration de la branche uenv-modifs
bd8c7f8 correction d'un bug avec le nom final
d73c929 correction d'un bug avec le choix du répertoire de destination
e9089d8 les répertoires de profil partagé et de machine sont traités comme un seul répertoire
e3f76cd possibilité de spécifier si un profil doit être installé dans le répertoire de profil partagé
## Version 2.0.0 du 22/06/2015-00:48 ## Version 2.0.0 du 22/06/2015-00:48
8286b29 Intégration de la branche uenv-modifs 8286b29 Intégration de la branche uenv-modifs

View File

@ -1 +1 @@
2.0.0 2.1.0

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" "$HOME/etc/${HOSTNAME%%.*}-bashrc.d" __uenv_source_dirs @@dest@@/bashrc.d "$HOME/etc/bashrc.${HOSTNAME%%.*}.d"
__uenv_cleanup __uenv_cleanup

View File

@ -3962,7 +3962,10 @@ function get_defaults_files() {
__gd_fs=("${__gd_fs[@]}" "/etc/default/$__gd_f") __gd_fs=("${__gd_fs[@]}" "/etc/default/$__gd_f")
__gd_found=1 __gd_found=1
fi fi
if [ -r "$HOME/etc/default/$__gd_f" ]; then if [ -r "$HOME/etc/default.${HOSTNAME%%.*}/$__gd_f" ]; then
__gd_fs=("${__gd_fs[@]}" "$HOME/etc/default.${HOSTNAME%%.*}/$__gd_f")
__gd_found=1
elif [ -r "$HOME/etc/default/$__gd_f" ]; then
__gd_fs=("${__gd_fs[@]}" "$HOME/etc/default/$__gd_f") __gd_fs=("${__gd_fs[@]}" "$HOME/etc/default/$__gd_f")
__gd_found=1 __gd_found=1
fi fi
@ -3976,9 +3979,9 @@ function get_defaults_files() {
} }
function set_defaults() { function set_defaults() {
# Pour chaque argument, sourcer /etc/default/$arg *et* ~/etc/default/$arg si # Pour chaque argument, sourcer /etc/default/$arg *et* (en priorité
# ceux-ci existent. *Sinon*, lire $scriptdir/lib/default/$arg si ce fichier # ~/etc/default.$HOSTNAME/$arg ou à défaut ~/etc/default/$arg) si ceux-ci
# existe # existent. *Sinon*, lire $scriptdir/lib/default/$arg si ce fichier existe
local -a __sd_fs local -a __sd_fs
local __sd_f local __sd_f
get_defaults_files __sd_fs "$@" get_defaults_files __sd_fs "$@"

View File

@ -57,7 +57,8 @@ 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 [ -f "$file" ] || continue
if __uenv_check_file "$dir" "$(basename -- "$file")"; then
source "$file" source "$file"
fi fi
done done

View File

@ -7,18 +7,20 @@ uprovide uenv_update
urequire base uenv urequire base uenv
function __uenv_move_after() { function __uenv_move_after() {
# Dans le fichier $1, déplacer la ligne $2 après la ligne $3. # Dans le fichier $1, déplacer la ligne $2 après la ligne commençant par
# l'expression régulière '^$3:'
# Si la ligne $2 n'existe pas, ne rien faire # Si la ligne $2 n'existe pas, ne rien faire
# Si la ligne $3 n'existe pas ou vaut '*', mettre la ligne $2 en dernier. # Si la ligne $3 n'existe pas ou vaut '*', mettre la ligne $2 en dernier.
# Si $4 est spécifié, l'utiliser comme fichier temporaire. # Si $4 est spécifié, l'utiliser comme fichier temporaire.
local tmpfile="$4" local tmpfile="$4"
[ -n "$tmpfile" ] || ac_set_tmpfile tmpfile [ -n "$tmpfile" ] || ac_set_tmpfile tmpfile
# XXX Il faudrait quoter $2 et $3 pour éviter les caractères spéciaux de # XXX Il faudrait quoter $3 pour éviter les caractères spéciaux de grep!
# grep! if quietgrep -F "$2" "$1"; then
if quietgrep "^$2$" "$1"; then local re_after="$3"
if [ "$3" != "*" ] && quietgrep "^$3$" "$1"; then [ "$re_after" != "*" ] && re_after="^$re_after:"
awkrun line="$2" after="$3" ' if [ "$re_after" != "*" ] && quietgrep "$re_after" "$1"; then
awkrun line="$2" re_after="$re_after" '
BEGIN { BEGIN {
found_line = 0 found_line = 0
found_after = 0 found_after = 0
@ -29,10 +31,10 @@ BEGIN {
next next
} }
} }
! found_after && $0 == after { ! found_after && $0 ~ re_after {
found_after = 1 found_after = 1
if (found_line) { if (found_line) {
# si nous avons trouvé la ligne avant after, la mettre juste après # si nous avons trouvé la ligne avant re_after, la mettre juste après
# sinon, pas la peine de faire de modification # sinon, pas la peine de faire de modification
print print
print line print line
@ -41,7 +43,7 @@ BEGIN {
} }
{ print } { print }
END { END {
if (! found_after && after == "*") { if (! found_after && re_after == "*") {
if (found_line) { if (found_line) {
print line print line
} }
@ -49,7 +51,7 @@ END {
}' <"$1" >"$tmpfile" && }' <"$1" >"$tmpfile" &&
cat "$tmpfile" >"$1" cat "$tmpfile" >"$1"
else else
grep -v "^$2$" "$1" >"$tmpfile" grep -vF "$2" "$1" >"$tmpfile"
echo "$2" >>"$tmpfile" echo "$2" >>"$tmpfile"
cat "$tmpfile" >"$1" cat "$tmpfile" >"$1"
fi fi
@ -57,18 +59,20 @@ END {
} }
function __uenv_move_before() { function __uenv_move_before() {
# Dans le fichier $1, déplacer la ligne $2 avant la ligne $3. # Dans le fichier $1, déplacer la ligne $2 avant la ligne commençant par
# l'expression régulière '^$3:'
# Si la ligne $2 n'existe pas, ne rien faire # Si la ligne $2 n'existe pas, ne rien faire
# Si la ligne $3 n'existe pas ou vaut '*', mettre la ligne $2 en premier. # Si la ligne $3 n'existe pas ou vaut '*', mettre la ligne $2 en premier.
# Si $4 est spécifié, l'utiliser comme fichier temporaire. # Si $4 est spécifié, l'utiliser comme fichier temporaire.
local tmpfile="$4" local tmpfile="$4"
[ -n "$tmpfile" ] || ac_set_tmpfile tmpfile [ -n "$tmpfile" ] || ac_set_tmpfile tmpfile
# XXX Il faudrait quoter $2 et $3 pour éviter les caractères spéciaux de # XXX Il faudrait quoter $3 pour éviter les caractères spéciaux de grep!
# grep! if quietgrep -F "$2" "$1"; then
if quietgrep "^$2$" "$1"; then local re_before="$3"
if [ "$3" != "*" ] && quietgrep "^$3$" "$1"; then [ "$re_before" != "*" ] && re_before="^$re_before:"
awkrun line="$2" before="$3" ' if [ "$re_before" != "*" ] && quietgrep "$re_before" "$1"; then
awkrun line="$2" re_before="$re_before" '
BEGIN { BEGIN {
found_line = 0 found_line = 0
found_before = 0 found_before = 0
@ -79,7 +83,7 @@ BEGIN {
next next
} }
} }
! found_before && ($0 == before || before == "*") { ! found_before && ($0 ~ re_before || re_before == "*") {
found_before = 1 found_before = 1
if (! found_line) { if (! found_line) {
print line print line
@ -92,7 +96,7 @@ BEGIN {
cat "$tmpfile" >"$1" cat "$tmpfile" >"$1"
else else
echo "$2" >"$tmpfile" echo "$2" >"$tmpfile"
grep -v "^$2$" "$1" >>"$tmpfile" grep -vF "$2" "$1" >>"$tmpfile"
cat "$tmpfile" >"$1" cat "$tmpfile" >"$1"
fi fi
fi fi
@ -107,36 +111,47 @@ function uenv_update_dir() {
# $3(=$1) est le répertoire de destination. Si $1 est un répertoire de # $3(=$1) est le répertoire de destination. Si $1 est un répertoire de
# préparation temporaire, on peut spécifier grâce à $3 quel est le # préparation temporaire, on peut spécifier grâce à $3 quel est le
# répertoire final après préparation. # répertoire final après préparation.
local dir="$(abspath "$1")" # S'ils sont spécifiés, les arguments $4..* sont des répertoires contenant
local destdir="${3:-$dir}" # des fichiers de profils supplémentaires qu'il faut considérer aussi. Dans
local tmpfile="$2" # ce cas, $3 est ignoré.
[ -n "$tmpfile" ] || ac_set_tmpfile tmpfile local dir="$(abspath "$1")"; shift
local tmpfile="$1"; shift
local destdir="${1:-$dir}"; shift
local sio="$dir/.source_in_order" local sio="$dir/.source_in_order"
local before after file local before after file filename
local -a files local -a files
[ -n "$tmpfile" ] || ac_set_tmpfile tmpfile
[ $# -gt 0 ] && destdir=
set -- "$dir" "$@"
local __uname_system="$UNAME_SYSTEM" local __uname_system="$UNAME_SYSTEM"
local __myhostname="$MYHOSTNAME" local __myhostname="$MYHOSTNAME"
>"$sio" >"$sio"
for file in "$dir/"*; do for dir in "$@"; do
[ -f "$file" ] || continue for file in "$dir/"*; do
file="$(basename "$file")" [ -f "$file" ] || continue
files=("${files[@]}" "$file") files=("${files[@]}" "$file")
__uenv_check_file "$dir" "$file" && echo "$file" >>"$sio" filename="$(basename -- "$file")"
__uenv_check_file "$dir" "$filename" && echo "$filename:$file" >>"$sio"
done
done done
# traiter d'abord les fichiers qui ont '@before *' ou '@after *' # traiter d'abord les fichiers qui ont '@before *' ou '@after *'
local -a nfiles local -a nfiles
for file in "${files[@]}"; do for file in "${files[@]}"; do
before="$(<"$dir/$file" awk '$0 ~ /^##@before / { print $2; exit 0 }')" filename="$(basename -- "$file")"
before="$(<"$file" awk '$0 ~ /^##@before / { print $2; exit 0 }')"
if [ "$before" == "*" ]; then if [ "$before" == "*" ]; then
__uenv_move_before "$sio" "$file" "$before" "$tmpfile" __uenv_move_before "$sio" "$filename:$file" "$before" "$tmpfile"
else else
array_set nfiles "$file" array_set nfiles "$file"
fi fi
after="$(<"$dir/$file" awk '$0 ~ /^##@after / { print $2; exit 0 }')"
after="$(<"$file" awk '$0 ~ /^##@after / { print $2; exit 0 }')"
if [ "$after" == "*" ]; then if [ "$after" == "*" ]; then
__uenv_move_after "$sio" "$file" "$after" "$tmpfile" __uenv_move_after "$sio" "$filename:$file" "$after" "$tmpfile"
else else
array_set nfiles "$file" array_set nfiles "$file"
fi fi
@ -146,13 +161,29 @@ function uenv_update_dir() {
# est avant *, si A est traité avant B, A risque de se trouver après B si B # est avant *, si A est traité avant B, A risque de se trouver après B si B
# est déplacé au début de la liste. # est déplacé au début de la liste.
for file in "${nfiles[@]}"; do for file in "${nfiles[@]}"; do
before="$(<"$dir/$file" awk '$0 ~ /^##@before / { print $2; exit 0 }')" filename="$(basename -- "$file")"
[ -n "$before" -a "$before" != "*" ] && __uenv_move_before "$sio" "$file" "$before" "$tmpfile"
after="$(<"$dir/$file" awk '$0 ~ /^##@after / { print $2; exit 0 }')" before="$(<"$file" awk '$0 ~ /^##@before / { print $2; exit 0 }')"
[ -n "$after" -a "$after" != "*" ] && __uenv_move_after "$sio" "$file" "$after" "$tmpfile" [ -n "$before" -a "$before" != "*" ] && __uenv_move_before "$sio" "$filename:$file" "$before" "$tmpfile"
after="$(<"$file" awk '$0 ~ /^##@after / { print $2; exit 0 }')"
[ -n "$after" -a "$after" != "*" ] && __uenv_move_after "$sio" "$filename:$file" "$after" "$tmpfile"
done done
awkrun destdir="$destdir" '{ print "source " destdir "/" $0 }' <"$sio" >"$tmpfile" && awkrun destdir="$destdir" '{
pos = match($0, /:/)
if (pos != 0) {
filename = substr($0, 1, pos - 1)
file = substr($0, pos + 1)
if (destdir != "") {
print "source " destdir "/" filename
} else {
print "source " file
}
} else {
print "source " destdir "/" $0
}
}' <"$sio" >"$tmpfile" &&
cat "$tmpfile" >"$sio" cat "$tmpfile" >"$sio"
} }
@ -161,9 +192,9 @@ function uenv_set_destdirs() {
shared_profiledestdir="$HOME/etc/profile.d" shared_profiledestdir="$HOME/etc/profile.d"
shared_bashrcdestdir="$HOME/etc/bashrc.d" shared_bashrcdestdir="$HOME/etc/bashrc.d"
shared_defaultdestdir="$HOME/etc/default" shared_defaultdestdir="$HOME/etc/default"
profiledestdir="$HOME/etc/${hostname}-profile.d" profiledestdir="$HOME/etc/profile.${hostname}.d"
bashrcdestdir="$HOME/etc/${hostname}-bashrc.d" bashrcdestdir="$HOME/etc/bashrc.${hostname}.d"
defaultdestdir="$HOME/etc/${hostname}-default" defaultdestdir="$HOME/etc/default.${hostname}"
} }
function uenv_sourced_in() { function uenv_sourced_in() {
@ -224,7 +255,8 @@ cas, il faut décommenter la ligne dans ~/.bash_profile qui source ~/.profile"
function uenv_install_profiles() { function uenv_install_profiles() {
local projdir="$1" profiledir="$2" bashrcdir="$3" defaultdir="$4" local projdir="$1" profiledir="$2" bashrcdir="$3" defaultdir="$4"
local tmpfile local tmpfile
local prefix envsrcdir envdestdir envfiles envfile envsrc envdest local prefix envsrcdir envdestdir shadestdir envfiles envfile envsrc envdest shadest
local shared_profiledestdir shared_bashrcdestdir shared_defaultdestdir
local profiledestdir bashrcdestdir defaultdestdir local profiledestdir bashrcdestdir defaultdestdir
uenv_set_destdirs uenv_set_destdirs
@ -234,22 +266,32 @@ function uenv_install_profiles() {
envdestdir="${prefix}destdir"; envdestdir="${!envdestdir}" envdestdir="${prefix}destdir"; envdestdir="${!envdestdir}"
shadestdir="shared_${prefix}destdir"; shadestdir="${!shadestdir}" shadestdir="shared_${prefix}destdir"; shadestdir="${!shadestdir}"
[ -n "$envsrcdir" -a -d "$envsrcdir" ] || continue [ -n "$envsrcdir" -a -d "$envsrcdir" ] || continue
mkdir -p "$envdestdir" "$shadestdir"
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" if [ "${envfile%.shared}" != "$envfile" ]; then
envdest="$envdestdir/$envfile" # Avec l'extension .shared, toujours installer dans le
shadest="$shadestdir/$envfile" # répertoire des profils partagés
envsrc="$envsrcdir/$envfile"
mkdir -p "$envdestdir" "$shadestdir" envfile="${envfile%.shared}"
if [ ! -f "$envdest" -a -f "$shadest" ]; then shadest="$shadestdir/$envfile"
# Si déjà installé en partagé, continuer à mettre à jour ce
# fichier-là
envdest="$shadest" envdest="$shadest"
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"
fi
fi fi
local actual_envdestdir="$(dirname -- "$envdest")"
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 "$actual_envdestdir")"
/bin/cp -f "$envsrc" "$envdestdir" /bin/cp -f "$envsrc" "$envdest"
elif [ "$prefix" == "default" ]; then elif [ "$prefix" == "default" ]; then
# ne jamais mettre à jour dans default # ne jamais mettre à jour dans default
if testdiff "$envdest" "$envsrc"; then if testdiff "$envdest" "$envsrc"; then
@ -261,7 +303,7 @@ function uenv_install_profiles() {
estepi "Le profil $(ppath "$envdest") a été conservé" estepi "Le profil $(ppath "$envdest") a été conservé"
fi fi
elif testdiff "$envdest" "$envsrc"; then 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 "$actual_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 ""
@ -269,15 +311,15 @@ function uenv_install_profiles() {
eecho "" eecho ""
fi fi
if ask_yesno "Faut-il remplacer $(ppath "$envdestdir/$envfile") par le profil par défaut?" O; then if ask_yesno "Faut-il remplacer $(ppath "$envdest") par le profil par défaut?" O; then
/bin/cp -f "$envsrc" "$envdestdir" /bin/cp -f "$envsrc" "$envdest"
fi fi
fi fi
done done
if [ "$prefix" != "default" ]; then if [ "$prefix" != "default" ]; then
estep "Mise à jour de l'ordre de lecture de $(ppath "$envdestdir")" estep "Mise à jour de l'ordre de lecture de $(ppath "$envdestdir")"
uenv_update_dir "$envdestdir" "$tmpfile" uenv_update_dir "$envdestdir" "$tmpfile" "" "$shadestdir"
fi fi
done done
ac_clean "$tmpfile" ac_clean "$tmpfile"

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" "$HOME/etc/${HOSTNAME%%.*}-profile.d" __uenv_source_dirs @@dest@@/profile.d "$HOME/etc/profile.${HOSTNAME%%.*}.d"
__uenv_cleanup __uenv_cleanup

13
uenv
View File

@ -100,9 +100,14 @@ 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 "$shared_profiledestdir" "$shared_bashrcdestdir" "$profiledestdir" "$bashrcdestdir"; do ac_set_tmpfile tmpfile
[ -d "$dir" ] || continue for prefix in profile bashrc; do
estep "Mise à jour de $(ppath "$dir")" envdir="${prefix}dir"; envdir="${!envdir}"
uenv_update_dir "$dir" "$envsetup_tmpfile" shadir="shared_${prefix}dir"; shadir="${!shadir}"
[ -d "$envdir" ] || continue
estep "Mise à jour de $(ppath "$envdir")"
uenv_update_dir "$envdir" "$tmpfile" "" "$shadir"
done done
ac_clean "$tmpfile"
fi fi