#!/usr/bin/env bash # build_oca_modules.sh # # Concatene des fichiers .list en une seule liste de modules separes par des # virgules, prete pour "odoo -i" ou "odoo -u". # # Format des fichiers .list : # - un module par ligne # - commentaires avec # (ligne entiere ou en fin de ligne) # - lignes vides ignorees # - doublons supprimes (premier garde, ordre preserve) # - retours chariot Windows (CR) tolerees # # Usage : # OCA_MODULES="$(./build_oca_modules.sh ./modules.d)" # ./build_oca_modules.sh ./modules.d # affiche la liste # ./build_oca_modules.sh f1.list f2.list # fichiers explicites set -euo pipefail if [ "$#" -eq 0 ]; then echo "Usage: $0 " >&2 exit 2 fi files=() for arg in "$@"; do if [ -d "$arg" ]; then # tous les .list du repertoire, ordre alphabetique stable while IFS= read -r f; do files+=("$f") done < <(find "$arg" -maxdepth 1 -type f -name '*.list' | sort) elif [ -f "$arg" ]; then files+=("$arg") else echo "Chemin introuvable: $arg" >&2 exit 2 fi done if [ "${#files[@]}" -eq 0 ]; then echo "Aucun fichier .list trouve" >&2 exit 2 fi result="$( cat "${files[@]}" \ | sed 's/#.*//' \ | tr -d ' \t\r' \ | grep -v '^$' \ | awk '!seen[$0]++' \ | paste -sd, - )" || true if [ -z "$result" ]; then echo "Liste de modules vide (que des commentaires ou des lignes vides ?)" >&2 exit 1 fi printf '%s\n' "$result"