#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 urequire uenv uenv_update function display_help() { uecho "$scriptname: Mettre à jour la configuration de l'environnement USAGE $scriptname [-u [projdirs...]] Cette commande met à jour l'ordre de chargement des fichiers de configuration dans ~/etc/{profile.d,bashrc.d}. Elle est donc utile si ces fichiers ont été modifiés manuellement, ou si un fichier a été ajouté manuellement. OPTIONS HOME=/path/to/homedir Spécifier le chemin vers ~ Cette option doit être placée avant les valeurs projdirs. -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. Ensuite, les fichiers de profil sont copié dans les répertoires ~/etc/{profile.d,bashrc.d,default} 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. -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 update=1 \ -l,--local-profiles local_profiles=1 \ -s,--shared-profiles local_profiles= \ @ args -- "$@" && set -- "${args[@]}" || die "$args" if [[ "$1" == HOME=* ]]; then export HOME eval "$1" shift fi 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} # n'existe pas update=1 # forcer alors le répertoire de projet nutools set -- "$scriptdir" "$@" elif [ -n "$*" ]; then # forcer la mise à jour si on spécifie des répertoires de projet update=1 elif [ -n "$update" -a -z "$*" ]; then # le répertoire de projet par défaut pour -u est nutools set -- "$scriptdir" fi # copier le fichier .nutoolsrc [ -f ~/.nutoolsrc ] || { estep "Copie de ~/.nutoolsrc" cp "$scriptdir/lib/nutoolsrc" ~/.nutoolsrc } if [ -n "$update" ]; then ## Vérifier les profils uenv_configure_profiles "$scriptdir" ## Mettre à jour les profils locaux for projdir in "$@"; do if [ ! -d "$projdir" ]; then eerror "$projdir: répertoire de projet invalide" continue fi etitle "$(ppath "$projdir")" install_profiles=false profiledir=lib/profile.d bashrcdir=lib/bashrc.d defaultdir=lib/default if [ -f "$projdir/.udir" ]; then eval "$(grep '^install_profiles=\|profiledir=\|bashrcdir=\|defaultdir=' "$projdir/.udir")" elif [ -f "$projdir/.uinst.conf" ]; then eval "$(grep '^install_profiles=\|profiledir=\|bashrcdir=' "$projdir/.uinst.conf")" else ewarn "répertoire ignoré parce qu'il n'est pas uinstallable" continue fi if is_yes "$install_profiles"; then uenv_install_profiles "$projdir" "$profiledir" "$bashrcdir" "$defaultdir" else ewarn "répertoire ignoré parce que install_profiles=$install_profiles dans .udir" fi eend done else ## Mettre uniquement à jour l'ordre de chargement des fichiers ## ~/etc/{profile.d,bashrc.d} ac_set_tmpfile tmpfile for prefix in profile bashrc; do envdir="${prefix}destdir"; envdir="${!envdir}" shadir="shared_${prefix}destdir"; shadir="${!shadir}" [ -d "$envdir" ] || continue estep "Mise à jour de $(ppath "$envdir")" uenv_update_dir "$envdir" "$tmpfile" "" "$shadir" done ac_clean "$tmpfile" fi