odoov18-compta/build_oca_modules.sh
2026-05-28 12:10:51 +02:00

60 lines
No EOL
1.5 KiB
Bash
Executable file

#!/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 <repertoire | fichiers.list...>" >&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"