pff: support des répertoires liés

This commit is contained in:
Jephté Clain 2024-01-30 14:51:48 +04:00
parent 7d7b88a427
commit 90bda71351
1 changed files with 39 additions and 6 deletions

45
pff
View File

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