diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-06-27 17:24:24 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-06-27 17:24:24 +0200 |
| commit | cd21c016b0652f2fc36a33690f676ba6e2f113f1 (patch) | |
| tree | 102d74f5eba4e432e6eae5822a22f0b68f48587e /odoo/modules/migration.py | |
| parent | 52749f9a02b5e2b8db4c6a5f6b17a8846da73287 (diff) | |
| parent | 2f2bc67c06781d5072ed904c441b31d80675fe9c (diff) | |
[MERGE] forward port branch saas-11.3 up to 2f2bc67c067
Diffstat (limited to 'odoo/modules/migration.py')
| -rw-r--r-- | odoo/modules/migration.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/odoo/modules/migration.py b/odoo/modules/migration.py index 57d217e770d..f401760b88a 100644 --- a/odoo/modules/migration.py +++ b/odoo/modules/migration.py @@ -59,6 +59,8 @@ class MigrationManager(object): Python file names must start by `pre-` or `post-` and will be executed, respectively, before and after the module initialisation. `end-` scripts are run after all modules have been updated. + A special folder named `0.0.0` can contain scripts that will be run on any version change. + In `pre` stage, `0.0.0` scripts are run first, while in `post` and `end`, they are run last. Example: <moduledir> `-- migrations @@ -71,6 +73,8 @@ class MigrationManager(object): |-- 9.0.1.1 # processed only on a 9.0 server | |-- pre-delete_table_z.py | `-- post-clean-data.py + |-- 0.0.0 + | `-- end-invariants.py # processed on all version update `-- foo.py # not processed """ @@ -117,13 +121,20 @@ class MigrationManager(object): return version # the version number already containt the server version return "%s.%s" % (release.major_version, version) - def _get_migration_versions(pkg): + def _get_migration_versions(pkg, stage): versions = sorted({ ver for lv in self.migrations[pkg.name].values() for ver, lf in lv.items() if lf }, key=lambda k: parse_version(convert_version(k))) + if "0.0.0" in versions: + # reorder versions + versions.remove("0.0.0") + if stage == "pre": + versions.insert(0, "0.0.0") + else: + versions.append("0.0.0") return versions def _get_migration_files(pkg, version, stage): @@ -150,10 +161,11 @@ class MigrationManager(object): parsed_installed_version = parse_version(installed_version) current_version = parse_version(convert_version(pkg.data['version'])) - versions = _get_migration_versions(pkg) + versions = _get_migration_versions(pkg, stage) for version in versions: - if parsed_installed_version < parse_version(convert_version(version)) <= current_version: + if ((version == "0.0.0" and parsed_installed_version < current_version) + or parsed_installed_version < parse_version(convert_version(version)) <= current_version): strfmt = {'addon': pkg.name, 'stage': stage, |
