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 NOUPSTREAM -- indiquer qu'il n'y a pas de distribution upstream ni de
fichiers origine. pff est alors uniquement utilisé pour gérer des fichiers origine. pff est alors uniquement utilisé pour gérer des
profils de fichier. profils de fichier.
Pour le moment, la seule différence est que le mode des fichiers de Pour le moment, la seule différence fonctionnelle est que le mode des
pff/Base n'est pas forcé à 0444. Ainsi, ces fichiers sont traités au fichiers de pff/Base n'est pas forcé à 0444. Ainsi, ces fichiers sont
même titre que ceux du répertoire pff/Common 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 COMMANDES / OPTIONS
Les arguments du script dépendent de la commande utilisée. Les commandes 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" setx -a lfiles=get_local_files "$pffdir"
for lfile in "${lfiles[@]}"; do for lfile in "${lfiles[@]}"; do
src="$pffdir/pff/Current/$lfile" 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" dest="$profile/$lfile"
elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then
dest="Common/$lfile" dest="Common/$lfile"
@ -1456,7 +1475,7 @@ function list_locals_cmd() {
local pffdir="$1" local pffdir="$1"
ensure_pffdir pffdir "$pffdir" 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 -a vlfiles=get_vlfiles "$pffdir" "$rfile" "$profile"
setx Pfile=get_pfile "$pffdir/$rfile" "$profile" "$pffdir" setx Pfile=get_pfile "$pffdir/$rfile" "$profile" "$pffdir"
setx Cfile=get_Cfile "$pffdir/$rfile" "$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} " flag="${COULEUR_ROUGE}P${COULEUR_NORMALE} "
elif [ -f "$Pfile" ]; then elif [ -f "$Pfile" ]; then
flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} " flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} "