summaryrefslogtreecommitdiff
path: root/odoo/modules/migration.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-06-27 14:40:32 +0200
committerChristophe Simonis <chs@odoo.com>2019-06-27 14:40:32 +0200
commit2f2bc67c06781d5072ed904c441b31d80675fe9c (patch)
tree2d9b097bf4ffdb9bcf778585c80d099dfe5c2d75 /odoo/modules/migration.py
parentb5beeb090196f0aa7d787e83a3b616d2ae705b13 (diff)
parentb1d43cc80e2dd5d6efeea60e9c74490fe2f70014 (diff)
[MERGE] forward port branch 11.0 up to b1d43cc80e2
Diffstat (limited to 'odoo/modules/migration.py')
-rw-r--r--odoo/modules/migration.py18
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,