diff --git a/build_oca_modules.sh b/build_oca_modules.sh new file mode 100644 index 0000000..33f7243 --- /dev/null +++ b/build_oca_modules.sh @@ -0,0 +1,60 @@ +#!/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" \ No newline at end of file