From 90bda713519c319e5abccf5f271cf95a4ef607d6 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 30 Jan 2024 14:51:48 +0400 Subject: [PATCH] =?UTF-8?q?pff:=20support=20des=20r=C3=A9pertoires=20li?= =?UTF-8?q?=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pff | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/pff b/pff index 1d19502..1294e4b 100755 --- a/pff +++ b/pff @@ -197,9 +197,17 @@ pff: NOUPSTREAM -- indiquer qu'il n'y a pas de distribution upstream ni de fichiers origine. pff est alors uniquement utilisé pour gérer des profils de fichier. - Pour le moment, la seule différence est que le mode des fichiers de - pff/Base n'est pas forcé à 0444. Ainsi, ces fichiers sont traités au - même titre que ceux du répertoire pff/Common + Pour le moment, la seule différence fonctionnelle est que le mode des + fichiers de pff/Base n'est pas forcé à 0444. Ainsi, ces fichiers sont + traités au même titre que ceux du répertoire pff/Common + Dans ce mode, on supporte aussi les liens vers des répertoires entiers: + il suffit de créer le répertoire dans pff/Base avec un unique fichier + .pffdir à l'intérieur. Lors du switch le répertoire correspondant est + lié s'il existe dans un profil. + IMPORTANT: ne pas mettre autre chose dans le répertoire, ce n'est pas + supporté pour le moment. Cela veut dire que chaque profil doit contenir + le répertoire complet, sans pouvoir hériter de fichiers par défaut + depuis pff/Base COMMANDES / OPTIONS Les arguments du script dépendent de la commande utilisée. Les commandes @@ -595,7 +603,18 @@ function select_profile() { setx -a lfiles=get_local_files "$pffdir" for lfile in "${lfiles[@]}"; do src="$pffdir/pff/Current/$lfile" - if [ -f "$pffdir/pff/$profile/$lfile" ]; then + if [[ "$lfile" == */.pffdir ]]; then + # répertoires entiers + lfile="${lfile%/.pffdir}" + src="${src%/.pffdir}" + if [ -d "$pffdir/pff/$profile/$lfile" ]; then + dest="$profile/$lfile" + elif [ "$profile" != Common -a -d "$pffdir/pff/Common/$lfile" ]; then + dest="Common/$lfile" + else + dest="Base/$lfile" + fi + elif [ -f "$pffdir/pff/$profile/$lfile" ]; then dest="$profile/$lfile" elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then dest="Common/$lfile" @@ -1456,7 +1475,7 @@ function list_locals_cmd() { local pffdir="$1" ensure_pffdir pffdir "$pffdir" - get_local_files "$pffdir" + get_local_files "$pffdir" | sed 's/\/.pffdir$/\//' } #=========================================================== @@ -1739,7 +1758,21 @@ function infos_cmd() { setx -a vlfiles=get_vlfiles "$pffdir" "$rfile" "$profile" setx Pfile=get_pfile "$pffdir/$rfile" "$profile" "$pffdir" setx Cfile=get_Cfile "$pffdir/$rfile" "$pffdir" - if [ ${#vlfiles[*]} -gt 0 ]; then + if [[ "$rfile" == */.pffdir ]]; then + # répertoires entiers + rfile="${rfile%.pffdir}" + Pfile="${Pfile%/.pffdir}" + Cfile="${Cfile%/.pffdir}" + if [ -d "$Pfile" ]; then + flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} " + elif [ "$profile" != Common -a -d "$Cfile" ]; then + flag="$(get_color YELLOW)C${COULEUR_NORMALE} " + elif [ -z "$show_all" ]; then + continue + else + flag=" " + fi + elif [ ${#vlfiles[*]} -gt 0 ]; then flag="${COULEUR_ROUGE}P${COULEUR_NORMALE} " elif [ -f "$Pfile" ]; then flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} "