From 8570d12ce602527018adf4126f6978c7cd173168 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Thu, 1 Feb 2024 20:55:47 +0400 Subject: [PATCH] =?UTF-8?q?pff:=20les=20r=C3=A9pertoires=20li=C3=A9s=20peu?= =?UTF-8?q?vent=20contenir=20des=20fichiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/pff | 17 +++++++++++++++-- pff | 25 +++++++++++++++++++------ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/lib/ulib/pff b/lib/ulib/pff index 078e2e8..cd942ef 100644 --- a/lib/ulib/pff +++ b/lib/ulib/pff @@ -117,8 +117,21 @@ function pff_get_first_profile() { function pff_get_local_files() { # afficher tous les fichiers locaux exprimés relativement au répertoire du # projet pff $1 - local pffdir="$1" - find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '__pv-.*__$' + local pffdir="$1" files file dirs dir isald + files="$(find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '/__pv-[^/_]*__[^/]*$')" + dirs="$(echo "$files" | grep '/\.pffdir$' | sed 's/\.pffdir$//')" + setx -a files=echo "$files" + setx -a dirs=echo "$dirs" + for file in "${files[@]}"; do + isald= + for dir in "${dirs[@]}"; do + if [ "${file#$dir}" != "$file" ]; then + isald=1 + break + fi + done + [ -z "$isald" -o "$file" == "${dir}.pffdir" ] && echo "$file" + done } function pff_get_rfile() { diff --git a/pff b/pff index 8d57c31..29045d7 100755 --- a/pff +++ b/pff @@ -204,10 +204,9 @@ pff: 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 + NB: s'il existe d'autres fichiers dans le répertoire, ils sont ignorés. + Cela permet d'avoir un ensemble de fichiers par défaut, mais les liens + symboliques doivent être faits manuellement. COMMANDES / OPTIONS Les arguments du script dépendent de la commande utilisée. Les commandes @@ -436,8 +435,22 @@ function get_first_profile() { function get_local_files() { # afficher tous les fichiers locaux exprimés relativement au répertoire du # projet pff $1 - local pffdir="$1" - find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '/__pv-[^/_]*__[^/]*$' + # pour les répertoires liés, ne lister que le fichier .pffdir + local pffdir="$1" files file dirs dir isald + files="$(find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '/__pv-[^/_]*__[^/]*$')" + dirs="$(echo "$files" | grep '/\.pffdir$' | sed 's/\.pffdir$//')" + setx -a files=echo "$files" + setx -a dirs=echo "$dirs" + for file in "${files[@]}"; do + isald= + for dir in "${dirs[@]}"; do + if [ "${file#$dir}" != "$file" ]; then + isald=1 + break + fi + done + [ -z "$isald" -o "$file" == "${dir}.pffdir" ] && echo "$file" + done } function get_rfile() {