« make format » donnait isort et black à tout fichier Python : la cible py37, plus petit dénominateur commun de six dépôts d'addons, imposait son style au code de ce dépôt. Le contexte décide désormais — les modules Odoo gardent isort et black, le reste passe par ruff, réglé dans .ruff.toml, comme la norme OCA depuis qu'elle a quitté black. Les dépôts rapatriés sous script/ en sont écartés, chemin nommé compris. La cible y reste py310 : dès 3.14 ruff écrit « except A, B: » sans parenthèses, que le python3 des hooks ne sait pas lire. Vérifié : un fichier reçoit deux normes selon son chemin, et aucun dépôt rapatrié n'est touché. --- EN --- "make format" gave isort and black to every Python file: the py37 target, lowest common denominator of six addons repositories, imposed its style on this repository's code. Context now decides — Odoo modules keep isort and black, everything else goes through ruff, set in .ruff.toml, as the OCA standard does since it left black. The repositories checked out under script/ are excluded, a named path included. The target stays py310 there: from 3.14 on, ruff writes "except A, B:" unparenthesised, which the python3 of the hooks cannot read. Checked: one file gets two standards by its path, and no checked-out repository is touched. Assisted-by: Claude Opus 5
36 lines
1.4 KiB
Bash
Executable file
36 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# © 2021-2026 TechnoLibre (http://www.technolibre.ca)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
#
|
|
# Un fichier Python, le formateur de SON contexte.
|
|
#
|
|
# Un module Odoo et un script d'outillage ne suivent pas la même norme et ne
|
|
# tournent pas sur le même interpréteur : les addons vivent dans des dépôts
|
|
# séparés, dont la communauté fixe le style, quand script/ n'engage que ce
|
|
# dépôt. Un réglage unique servait donc mal les deux.
|
|
#
|
|
# addons/…, odoo*/addons/… isort + black, cible py37 : les séries d'Odoo
|
|
# encore supportées descendent jusque-là.
|
|
# tout le reste ruff, réglé par .ruff.toml à la racine.
|
|
|
|
VENV="$(xargs < conf/python-erplibre-venv 2> /dev/null)"
|
|
RUFF="./${VENV}/bin/ruff"
|
|
|
|
for fichier in "$@"; do
|
|
case "${fichier}" in
|
|
./addons/* | addons/* | ./odoo*/addons/* | odoo*/addons/*)
|
|
"./${VENV}/bin/isort" --profile black -l 79 "${fichier}"
|
|
./script/maintenance/black.sh "${fichier}"
|
|
;;
|
|
*)
|
|
if [[ ! -x "${RUFF}" ]]; then
|
|
echo "ruff absent de ${VENV} : ./script/install/install_erplibre.sh" >&2
|
|
exit 1
|
|
fi
|
|
# Le tri des imports d'abord : il déplace des lignes que le formatage
|
|
# remet ensuite à la bonne largeur.
|
|
"${RUFF}" check --select I --fix --quiet "${fichier}"
|
|
"${RUFF}" format --quiet "${fichier}"
|
|
;;
|
|
esac
|
|
done
|