diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-06-27 20:45:52 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-06-27 20:45:52 +0200 |
| commit | 5e81b18e24a358b3f4145168f88614a9be37ac14 (patch) | |
| tree | 198950ff1118ddd91ad296a8d27b861bf6c21d76 /odoo/modules | |
| parent | c3a609eae4ff5396c1814228d3fc75623ab21b49 (diff) | |
| parent | 0247d2f35fdeebdb48e8eafc2ae69d1675158303 (diff) | |
[MERGE] forward port branch saas-12.3 up to 0247d2f35fd
Diffstat (limited to 'odoo/modules')
| -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 2dec12674de..6331af43660 100644 --- a/odoo/modules/migration.py +++ b/odoo/modules/migration.py @@ -36,6 +36,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 @@ -48,6 +50,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 """ @@ -94,13 +98,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): @@ -127,10 +138,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, |
