From 847d4e5ee6a50284bd814b261d8db5a7edc1587e Mon Sep 17 00:00:00 2001 From: Christophe Simonis <chs@odoo.com> Date: Wed, 29 Mar 2023 12:21:27 +0000 Subject: [PATCH] [FIX] core: correctly handle major-less upgrade scripts during major version change closes odoo/odoo#117886 X-original-commit: c38b5baaeac28a7952601878a5b5efadf7f52984 Signed-off-by: Christophe Simonis <chs@odoo.com> --- odoo/modules/migration.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/odoo/modules/migration.py b/odoo/modules/migration.py index 8354967a2670..141a11134a4d 100644 --- a/odoo/modules/migration.py +++ b/odoo/modules/migration.py @@ -145,12 +145,23 @@ class MigrationManager(object): parsed_installed_version = parse_version(installed_version) current_version = parse_version(convert_version(pkg.data['version'])) - versions = _get_migration_versions(pkg, stage) + def compare(version): + if version == "0.0.0" and parsed_installed_version < current_version: + return True - for version in versions: - if ((version == "0.0.0" and parsed_installed_version < current_version) - or parsed_installed_version < parse_version(convert_version(version)) <= current_version): + full_version = convert_version(version) + majorless_version = (version != full_version) + + if majorless_version: + # We should not re-execute major-less scripts when upgrading to new Odoo version + # a module in `9.0.2.0` should not re-execute a `2.0` script when upgrading to `10.0.2.0`. + return parsed_installed_version < parse_version(full_version) < current_version + return parsed_installed_version < parse_version(full_version) <= current_version + + versions = _get_migration_versions(pkg, stage) + for version in versions: + if compare(version): strfmt = {'addon': pkg.name, 'stage': stage, 'version': stageformat[stage] % version, -- GitLab