From 3050b6d7c01e6ee03ed973da9e599f2bf90498e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Sun, 17 May 2026 21:22:00 +0200 Subject: [PATCH] =?UTF-8?q?refactor:=20prep.sh=20=E2=80=94=20qualit=C3=A9?= =?UTF-8?q?=20et=20s=C3=A9curit=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - set -uo pipefail - mkdir -p immédiat sur log_dir avant tout appel à log() - log() : garde sur argument vide - ls remplacé par find + sort (robuste aux espaces et à la locale) - list_files() : helper mutualisé pour les 5 listings - Condition inutile sur files_local-share-doc supprimée - Fichier source manquant → error() au lieu d'être ignoré silencieusement - Section "Résumé des DOC" supprimée (code mort depuis 2023) - Commentaires numérotés obsolètes supprimés - Indentation homogénéisée (4 espaces) Co-Authored-By: Claude Sonnet 4.6 --- prep.sh | 148 +++++++++++++++++--------------------------------------- 1 file changed, 44 insertions(+), 104 deletions(-) diff --git a/prep.sh b/prep.sh index 8f0daa8..2b73cc7 100755 --- a/prep.sh +++ b/prep.sh @@ -1,25 +1,18 @@ #!/bin/bash +set -uo pipefail # Script Bash - prep.sh # Auteur : Cédric Abonnel - # Description : Prépare les fichiers de DOC et listing. -# Version 07.07.24 -# - Ajout du traitement de ytdll - -# Version 23.12.14 -# - Modification du traitement des résumés des DOC. La fonctionnalité n'est pas encore accessible. - - # Vérification du répertoire de travail [[ ! -d "local/bin" ]] && { echo "Erreur : lancer depuis la racine du projet scripts-bash"; exit 1; } -# Spécifier le chemin du fichier journal +# Point 1 : log_dir créé immédiatement, avant tout appel à log() log_dir="${XDG_STATE_HOME:-$HOME/.local/state}/scripts-bash" +mkdir -p "$log_dir" log_file="${log_dir}/a5l-scripts_bash_prep-$(date '+%Y%m%d-%H%M%S')-$$.log" -# Fonction pour afficher un message d'erreur et quitter le script en cas d'erreur error() { local error_message="$1" log "ERREUR: $error_message" @@ -27,128 +20,75 @@ error() { exit 1 } -# Fonction pour enregistrer les messages de journal +# Point 2 : garde sur $1 vide log() { - echo "$(date '+%Y-%m-%d %H:%M:%S') - $$ - $1" >> "$log_file" - echo "$1" + if [ -n "$1" ]; then + echo "$(date '+%Y-%m-%d %H:%M:%S') - $$ - $1" >> "$log_file" + echo "$1" + fi } create_dir() { - # S'assurer que le répertoire de destination existe, sinon, le créer log "Tentative de création du dossier $1" if [ ! -d "$1" ]; then - mkdir -p "$1" || error "Impossible de créer le répertoire $1" - log " _ Le répertoire $1 a été créé." + mkdir -p "$1" || error "Impossible de créer le répertoire $1" + log " _ Le répertoire $1 a été créé." else - log " _ Le répertoire $1 existe déjà." + log " _ Le répertoire $1 existe déjà." fi - } -create_dir "$log_dir" +# Point 3 : find remplace ls (robuste aux espaces et à la locale) +list_files() { + local dir="$1" + local dest="$2" + log "Lister les fichiers présents dans $dir" + find "$dir" -maxdepth 1 -mindepth 1 -type f -exec basename {} \; | sort > "$dest" +} -log "Lister les fichiers présents dans local/bin" -ls local/bin/ -1 >.config/files_local-bin +log "Début du script" +list_files "local/bin" ".config/files_local-bin" -######## -# 1. Lister des fichiers dans local/share/doc -# 2. Générer les fichiers man dans local/share/man -# 3. Lister des fichiers dans local/share/man -# 4. Lister des fichiers dans local/share/ytdll et share/ytdll/lib - -# Spécifier le chemin du répertoire du dépôt Git local source_dir="local/share/doc/scripts-bash" - -# Spécifier le chemin du répertoire destination_dir="local/share/man/man1" create_dir "$destination_dir" -log "Lister les fichiers présents dans local/share/doc/scripts-bash" -ls "$source_dir/" -1 >.config/files_local-share-doc +list_files "$source_dir" ".config/files_local-share-doc" -log "Creer les pages MAN" +log "Créer les pages MAN" -file_local_desc=.config/files_local-share-doc - -# Répertoire local/share/man -## Vérifier si Pandoc est installé if ! command -v pandoc &> /dev/null; then log "Pandoc n'est pas installé." - - # Vérifier la distribution pour utiliser le gestionnaire de paquets approprié - if [ -x "$(command -v dnf)" ]; then - log "Installation de Pandoc via DNF (Red Hat)..." + if [ -x "$(command -v apt)" ]; then + log "Installation de Pandoc via APT..." + sudo apt update && sudo apt install -y pandoc + elif [ -x "$(command -v dnf)" ]; then + log "Installation de Pandoc via DNF..." sudo dnf install -y pandoc elif [ -x "$(command -v yum)" ]; then - log "Installation de Pandoc via YUM (Red Hat)..." + log "Installation de Pandoc via YUM..." sudo yum install -y pandoc - elif [ -x "$(command -v apt)" ]; then - log "Installation de Pandoc via APT (Debian)..." - sudo apt update && sudo apt install -y pandoc else - error "Le gestionnaire de paquets n'est pas pris en charge." - fi - - # Vérifier à nouveau si Pandoc est installé - if ! command -v pandoc &> /dev/null; then - error "L'installation de Pandoc a échoué." - else - log "Pandoc a été installé avec succès." + error "Gestionnaire de paquets non pris en charge. Installez Pandoc manuellement." fi + command -v pandoc &> /dev/null || error "L'installation de Pandoc a échoué." + log "Pandoc installé avec succès." fi -log " Traitement des fichiers à copier dans $destination_dir" -# Génération des fihciers man -log " Vérifier si le fichier $file_local_desc existe" -if [ -e "$file_local_desc" ]; then - log " Récupérer des fichiers installés" - mapfile -t fileslist_local < "$file_local_desc" - - log " Créer la page man" - for file in "${fileslist_local[@]}"; do - new_name="${file%.*}" # Supprimer l'extension md - if [ -f "$source_dir/$file" ]; then - pandoc -s "$source_dir/$file" -t man -o "$destination_dir/$new_name" || error "Impossible de créer la page 'man' $destination_dir/$new_name depuis $source_dir/$file" - log " Creation de la page MAN $destination_dir/$new_name depuis $source_dir/$file" - fi - done -else - error " Le fichier $file_local_desc est introuvable." -fi - -log "Lister les fichiers présents dans local/share/man/man1" -ls local/share/man/man1/ -1 >.config/files_local-share-man - -log "Lister les fichiers présents dans local/share/ytdll" -ls local/share/ytdll/ -1 >.config/files_local-share-ytdll - -log "Lister les fichiers présents dans local/share/ytdll/lib" -ls local/share/ytdll/lib/ -1 >.config/files_local-share-ytdll-lib - -######## -# Résumé des DOC - - -for fichier in local/share/doc/scripts-bash/*.md; do - echo "Résumé pour $fichier :" - description_found=0 - description_started=0 - - while IFS= read -r ligne; do - if [ "$description_found" -eq 1 ]; then - if [ -z "$ligne" ]; then - [ "$description_started" -eq 1 ] && break - else - description_started=1 - echo "$ligne" - fi - elif [ "$ligne" = "# DESCRIPTION" ]; then - description_found=1 - fi - done < "$fichier" - - echo "..." +# Points 4 et 5 : lecture directe du fichier généré, erreur si source absente +mapfile -t fileslist_local < ".config/files_local-share-doc" +for file in "${fileslist_local[@]}"; do + new_name="${file%.*}" + [ ! -f "$source_dir/$file" ] && error "Fichier source introuvable : $source_dir/$file" + pandoc -s "$source_dir/$file" -t man -o "$destination_dir/$new_name" \ + || error "Impossible de créer la page man '$destination_dir/$new_name' depuis '$source_dir/$file'" + log "Page MAN créée : $destination_dir/$new_name" done +list_files "local/share/man/man1" ".config/files_local-share-man" +list_files "local/share/ytdll" ".config/files_local-share-ytdll" +list_files "local/share/ytdll/lib" ".config/files_local-share-ytdll-lib" + +log "Fin du script."