« Command returned error code: 1 » followed a theme that was removed correctly. 1 is this toolkit's « there are findings », but the report was the uninstaller's last command, so its code became the script's; and the COW check was still read through the capturing executor, which announces any non-zero code as an error. The leftovers can now be dealt with instead of only listed: keep by default, or delete after their content is written to private/. Listing fifteen attachments and stopping there meant composing an unlink() by hand, mid-migration, from identifiers read off a screen. --- FR --- [FIX] addons : cesser d'appeler « erreur » un rapport de restes « Command returned error code: 1 » suivait un thème correctement retiré. 1 veut dire « il y a des constats » dans cet outillage, mais le rapport était la dernière commande du désinstalleur, donc son code devenait celui du script ; et la vérification COW passait encore par l'exécuteur qui capture, lequel annonce tout code non nul comme une erreur. Les restes peuvent désormais être traités, pas seulement listés : garder par défaut, ou effacer après écriture de leur contenu sous private/. Lister quinze pièces jointes et s'arrêter là revenait à faire composer un unlink() à la main, en pleine migration. Assisted-by: Claude Opus 5 (cherry picked from commit 304ce32b2680e3d01e38c3224bb85c2798cd6f53)
96 lines
3.8 KiB
Bash
Executable file
96 lines
3.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Désinstaller un thème comme Odoo le fait lui-même.
|
|
#
|
|
# « ./run.sh --uninstall theme_x » retire le MODULE, pas le THÈME. Choisir un
|
|
# thème (button_choose_theme, ce que pose --install-theme) fait DEUX choses :
|
|
# copier ses vues et ressources dans chaque site, et écrire dans
|
|
# user_values.scss une personnalisation qui DÉFINIT $o-theme-font-number et
|
|
# ses trois voisines. Le chemin de retrait d'Odoo, _theme_remove(), défait les
|
|
# deux.
|
|
#
|
|
# Le désinstaller sans lui laisse donc les copies, et surtout n'écrit jamais
|
|
# ces définitions. Mesuré sur une migration réelle 12 -> 13 : le bundle
|
|
# web.assets_frontend s'arrête sur « Undefined variable: $o-theme-font-number
|
|
# ». La variable venait des fichiers option_font_body_* d'Odoo 12, supprimés
|
|
# en 13.0 ; seul le thème la redéfinissait encore, et le retirer a mis à nu
|
|
# une personnalisation figée depuis des années.
|
|
#
|
|
# Usage : ./script/addons/uninstall_addons_theme.sh <base> <theme> [config]
|
|
|
|
Red='\033[0;31m' # Red
|
|
Color_Off='\033[0m' # Text Reset
|
|
|
|
if [[ $# -lt 2 ]]; then
|
|
echo "Usage: $0 <database> <theme_module> [config]"
|
|
exit 1
|
|
fi
|
|
|
|
DATABASE="$1"
|
|
THEME="$2"
|
|
CONFIG="${3:-./config.conf}"
|
|
|
|
if [[ $# -eq 3 ]]; then
|
|
./script/addons/check_addons_exist.py -m "$THEME" -c "$3"
|
|
else
|
|
./script/addons/check_addons_exist.py -m "$THEME"
|
|
fi
|
|
retVal=$?
|
|
if [[ $retVal -ne 0 ]]; then
|
|
echo -e "${Red}Error${Color_Off} check_addons_exist.py into uninstall_addons_theme.sh"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Unload theme '$THEME' from every website of BD '$DATABASE'"
|
|
|
|
# Le déchargement passe par le shell : _theme_remove() n'a pas d'option de
|
|
# ligne de commande, et l'écrire ici évite d'ajouter une option au fork pour
|
|
# chaque version d'Odoo. Les journaux se mêlent à la sortie, d'où la
|
|
# sentinelle : on ne conclut que sur ce qui la suit.
|
|
./odoo_bin.sh shell -c "$CONFIG" -d "$DATABASE" --no-http --log-level=warn <<PYTHON
|
|
theme_name = "$THEME"
|
|
Module = env["ir.module.module"]
|
|
theme = Module.search([("name", "=", theme_name)], limit=1)
|
|
if not theme:
|
|
print("ERPLIBRE_THEME_UNLOAD: unknown %s" % theme_name)
|
|
else:
|
|
lst_website = env["website"].search([])
|
|
for website in lst_website:
|
|
# _theme_remove décharge le thème COURANT du site et, avant tout,
|
|
# rappelle _reset_default_config() : c'est cet appel qui écrit
|
|
# font-number & co. dans user_values.scss. Il vaut même quand le
|
|
# site n'a plus de thème — c'est précisément le cas à réparer.
|
|
theme.with_context(website_id=website.id)._theme_remove(website)
|
|
env.cr.commit()
|
|
print("ERPLIBRE_THEME_UNLOAD: done %s website(s)" % len(lst_website))
|
|
PYTHON
|
|
|
|
retVal=$?
|
|
if [[ $retVal -ne 0 ]]; then
|
|
echo -e "${Red}Error${Color_Off} odoo_bin.sh shell into uninstall_addons_theme.sh"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Uninstall theme module '$THEME' on BD '$DATABASE'"
|
|
|
|
if [[ $# -eq 3 ]]; then
|
|
./run.sh --no-http --stop-after-init -d "$DATABASE" --uninstall "$THEME" -c "$3"
|
|
else
|
|
./run.sh --no-http --stop-after-init -d "$DATABASE" --uninstall "$THEME"
|
|
fi
|
|
|
|
retVal=$?
|
|
if [[ $retVal -ne 0 ]]; then
|
|
echo -e "${Red}Error${Color_Off} run.sh into uninstall_addons_theme.sh"
|
|
exit 1
|
|
fi
|
|
|
|
# Ce que le déchargement ne prend pas : les pièces jointes que le thème a
|
|
# laissées sous son propre chemin. Elles ne cassent rien tant que ses vues
|
|
# sont parties, mais elles survivent à toutes les migrations suivantes et
|
|
# personne ne sait plus d'où elles viennent. On les signale, on ne les
|
|
# supprime pas : leur contenu peut être la seule trace d'une personnalisation.
|
|
# Son code de sortie dit « il reste des choses », pas « la désinstallation a
|
|
# échoué » : le laisser devenir celui du script faisait annoncer une erreur
|
|
# sur un thème correctement retiré.
|
|
./script/addons/theme_leftover.py -d "$DATABASE" -t "$THEME" -c "$CONFIG" || true
|
|
exit 0
|