Without this patch, when upgrading after you have stored the deprecated features parameter, the cursor became broken and no more migrations could happen. You got this error:
Traceback (most recent call last):
File "/usr/local/bin/odoo", line 6, in <module>
exec(compile(open(__file__).read(), __file__, 'exec'))
File "/opt/odoo/custom/src/odoo/odoo.py", line 160, in <module>
main()
File "/opt/odoo/custom/src/odoo/odoo.py", line 157, in main
openerp.cli.main()
File "/opt/odoo/custom/src/odoo/openerp/cli/command.py", line 64, in main
o.run(args)
File "/opt/odoo/custom/src/odoo/openerp/cli/shell.py", line 65, in run
self.shell(openerp.tools.config['db_name'])
File "/opt/odoo/custom/src/odoo/openerp/cli/shell.py", line 52, in shell
registry = openerp.modules.registry.RegistryManager.get(dbname)
File "/opt/odoo/custom/src/odoo/openerp/modules/registry.py", line 355, in get
update_module)
File "/opt/odoo/custom/src/odoo/openerp/modules/registry.py", line 386, in new
openerp.modules.load_modules(registry._db, force_demo, status, update_module)
File "/opt/odoo/custom/src/odoo/openerp/modules/loading.py", line 335, in load_modules
force, status, report, loaded_modules, update_module)
File "/opt/odoo/custom/src/odoo/openerp/modules/loading.py", line 239, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "/opt/odoo/custom/src/odoo/openerp/modules/loading.py", line 136, in load_module_graph
registry.setup_models(cr, partial=True)
File "/opt/odoo/custom/src/odoo/openerp/modules/registry.py", line 186, in setup_models
cr.execute('select model, transient from ir_model where state=%s', ('manual',))
File "/opt/odoo/custom/src/odoo/openerp/sql_db.py", line 154, in wrapper
return f(self, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/openerp/sql_db.py", line 233, in execute
res = self._obj.execute(query, params)
psycopg2.InternalError: current transaction is aborted, commands ignored until end of transaction block
Now you can safely migrate, be that parameter pre-created or not.
Without this patch, if your tests are run under a `PYTHONOPTIMIZE=2` precompiled environment, they'd fail with this error because a new `.pyo` file would be created.:
FAIL: test_basic (openerp.addons.module_auto_update.tests.test_addon_hash.TestAddonHash)
Traceback (most recent call last):
` File "/opt/odoo/auto/addons/module_auto_update/tests/test_addon_hash.py", line 41, in test_basic
` 'static/src/some.js',
` AssertionError: Lists differ: ['README.rst', 'data/f1.xml', ... != ['README.rst', 'data/f1.xml', ...
`
` First differing element 13:
` models/stuff.pyo
` static/src/some.js
`
` First list contains 1 additional elements.
` First extra element 14:
` static/src/some.js
`
` ['README.rst',
` 'data/f1.xml',
` 'data/f2.xml',
` 'i18n/en.po',
` 'i18n/en_US.po',
` 'i18n/fr.po',
` 'i18n/fr_BE.po',
` 'i18n/test.pot',
` 'i18n_extra/en.po',
` 'i18n_extra/fr.po',
` 'i18n_extra/nl_NL.po',
` 'models/stuff.py',
` 'models/stuff.pyc',
` - 'models/stuff.pyo',
` 'static/src/some.js']
Ran 3 tests in 0.005s
FAILED
With this patch, the `.pyo` file is included, so tests will pass anywhere.
The previous implementation of this addon proved being extremely buggy:
- It supplied out of the box a enabled cron to update Odoo that didn't restart the server, which possibly meant that upgrades broke things.
- It overloaded standard Odoo upgrade methods that made i.e. installing an addon sometimes forced to upgrade all other addons in the database.
- The checksum system wasn't smart enough, and some files that didn't need a module upgrade triggered the upgrade.
- It was based on a dirhash library that was untested.
- Some updates were not detected properly.
- Storing a column into `ir.module.module` sometimes forbids uninstalling the addon.
Thanks to Stéphane Bidoul (ACSONE), now we have new methods to perform the same work in a safer and more stable way.
All I'm doing here is:
- Cron is disabled by default.
- Installed checksums are no longer saved at first install.
- Old installations should keep most functionality intact thanks to the migration script.
- Drop some duplicated tests.
- Allow module uninstallation by pre-removing the fields from ir.mode.model.
- When uninstalling the addon, the deprecated features will get removed for next installs always.
Besides that, fixes for the new implementation too:
- When uninstalling the addon, we remove the stored checksum data, so further installations work as if the addon was installed from scratch.
This code comes from the module_checksum_upgrade proposal
at https://github.com/OCA/server-tools/pull/1176.
* [ADD] module_checksum_upgrade
It provides the core mechanism of module_auto_update without
the cron nor any change to the standard upgrade mechanism.
Instead it provides an API on which module_auto_update can build,
as well as a method which can be called from a script to run
the upgrade of modules for which the checksum has changed.
* [IMP] refactor module_auto_update
Make it depend on module_checksum_upgrade which provides
the core mechanisms of managing the checksums. module_auto_update
makes it automatic.
* [IMP] module_checksum_upgrade: better exclusion mechanism
Ignore files based on exclude patterns.
Ignore uninstalled languages.
Better default for patterns to ignore (*.pyc,*.pyo,*.pot,static/*)
For better control on the hashing mechanism implement our own:
it's quite easy, and the checksumdir module used previously had
no test.
* [MIG] module_auto_update: adapt to new checksum mechanism
* [IMP] module_checksum_upgrade: raise in case of
incomplete upgrade
* [IMP] module_checksum_upgrade: improve default exclusion
pattern
* [IMP] module_checksum_upgrade: control translations
overwrite
* [IMP] module_checksum_upgrade: one more test
* [IMP] module_checksum_upgrade: credits [ci skip]
- Files are clearly suffixed with `_deprecated` so we know those features have no support nor migrations.
- Views are removed, since updating from UI was too buggy to support it anymore.