-
- Downloads
[FIX] core: avoid losing translations during module upgrade
Consider field F in module X with parameter translate=False, and F is overridden in module Y with parameter translate=True. During the upgrade of module X, module Y hasn't been loaded yet, and the ORM considers the field to be `translate=False`. Therefore it converts its database column from type jsonb to varchar, and accidentally drops non-en_US values: {"en_US": "English value", "fr_FR": "French value"} (jsonb) -> 'English value' (varchar) As a result, translations are lost after upgrade. This commit fixes the bug by checking whether the field is translated in database and patches the field accordingly when loading the registry. This avoids the ORM considering the field as non-translated while upgrading modules. In order to "force" translated fields to become non-translated ones, at the end of the loading process the patch above is discarded, and fields are checked again. We then adapt the schema of models that have such fields. This extra step handles the uninstallation of modules like module Y in the example above. The patching of the fields has one potential issue. While upgrading module X, field F is patched with translate=True. If module Y actually overrides F with translate=xml_translate or so, this may cause the behavior of the upgrade to be slightly incorrect. Because of the complexity, we have chosen to not support this case. closes odoo/odoo#110572 Signed-off-by:Raphael Collet <rco@odoo.com> Co-authored-by:
Raphael Collet <rco@odoo.com>
Loading
Please register or sign in to comment