TIP: You can type at any time to perform a new search.
Odoo Repository Migration Data
odoo_repository_migration · OCA/module-composition-analysis
- Repository
- OCA/module-composition-analysis · module folder · Try on Runboat
- Module version
- 1.1.0
- Category
- Tools
- Folder size
- 0.19 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/module-composition-analysis
- Last tracking update
- 2026-08-07 08:43:07
- Authors
- Camptocamp, Odoo Community Association (OCA)
- Maintainers
- Camptocamp, Odoo Community Association (OCA)
- Committers
- Sébastien Alix, Weblate, OCA-git-bot, oca-ci
- Odoo dependencies
- Python dependencies
- oca-port, gitpython, odoo-addons-parser, pyyaml, requests, cachetools
- System dependencies
- None
- Required by
- odoo_project_migration
- Description
This module collects and records modules migration data from Odoo repositories. Thanks to [oca-port](https://github.com/OCA/oca-port/) and data collected by `odoo_repository`, this module will generate migration data on each module for declared migration paths (e.g. 16.0 -> 18.0). Also, for specific cases you can declare what a module became in a given Odoo version, like OCA `web_domain_field` replaced by standard Odoo module `web` starting from 17.0 (with an optional explanation that could help users, like how to use this new module compared to the previous one). Given a migration path, a module can get one of this migration status: | Status | Description | | ------ | ----------- | | *Fully Ported* | All commits from source version are present in target version | | *To migrate* | The module doesn't exist on target version | | *Ported (missing commits?)* | Some commits from source version are not ported in target version (could be false-positive) | | *To review* | A migration PR has been detected | | *Replaced* | The module has been replaced by another one (not sharing the same git history) | | *Moved to standard?* | The module name has been detected in Odoo standard repositories for target version. High chance this module is or should be replaced by another one instead (by creating a timeline), so it mainly helps to detect such cases. | | *Moved to OCA* | the module name is available in an OCA repository (could be a false-positive because sharing the same name, in such case a timeline has to be created) | | *Moved to generic repo* | a specific module (only available in a project) in source version now exists in a generic repository (could be a false-positive if both modules have only their name in common) | It helps to build a consolidated knowledge database accross different Odoo versions for everyone: functionals and developers.
Code Analysis ⓘ
Views touched (11)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
odoo_migration_path_view_form |
odoo.migration.path.form | odoo.migration.path | form | New |
odoo_migration_path_view_tree |
odoo.migration.path.list | odoo.migration.path | list | New |
odoo_module_branch_migration_view_form |
odoo.module.branch.migration.form | odoo.module.branch.migration | form | New |
odoo_module_branch_migration_view_search |
odoo.module.branch.migration.search | odoo.module.branch.migration | search | New |
odoo_module_branch_migration_view_tree |
odoo.module.branch.migration.list | odoo.module.branch.migration | list | New |
odoo_module_branch_timeline_view_form |
odoo.module.branch.timeline.form | odoo.module.branch.timeline | form | New |
odoo_module_branch_timeline_view_search |
odoo.module.branch.timeline.search | odoo.module.branch.timeline | search | New |
odoo_module_branch_timeline_view_tree |
odoo.module.branch.timeline.list | odoo.module.branch.timeline | list | New |
odoo_module_branch_view_form |
odoo.module.branch.form.inherit | odoo.module.branch | form | Inherits odoo_repository.odoo_module_branch_view_form |
odoo_module_branch_view_search |
odoo.module.branch.search.inherit | odoo.module.branch | search | Inherits odoo_repository.odoo_module_branch_view_search |
odoo_repository_view_form |
odoo.repository.form.inherit | odoo.repository | form | Inherits odoo_repository.odoo_repository_view_form |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (5)
New fields (4)
-
activeBooleandefault=True -
nameCharcompute='_compute_name'store=True -
source_branch_idMany2one → odoo.branchcomodel_name='odoo.branch'ondelete='cascade'required=True -
target_branch_idMany2one → odoo.branchcomodel_name='odoo.branch'ondelete='cascade'required=True
-
action_scan(self)Scan the source+target branches. Scan is done on all related repositories configured to collect migration data. -
create(self, vals_list)@api.model_create_multi
New fields (4)
-
migration_idsOne2many → odoo.module.branch.migrationcomodel_name='odoo.module.branch.migration'inverse_name='module_branch_id'string='Migrations' -
migration_scanBooleancompute='_compute_migration_scan'help='Technical field telling if this module is elligible for a migration scan.'store=True -
next_odoo_version_module_branch_idMany2one → odoo.module.branchcomodel_name='odoo.module.branch'compute='_compute_next_odoo_version_module_branch_id'string='Next Odoo Version Module Branch' -
timeline_idsOne2many → odoo.module.branch.timelinecomodel_name='odoo.module.branch.timeline'inverse_name='module_branch_id'string='Timeline'
-
create(self, vals_list)@api.model_create_multi -
open_next_module_branches(self) -
write(self, vals)
New fields (25)
-
activeBooleanrelated='migration_path_id.active'store=True -
author_idsMany2manyrelated='module_branch_id.author_ids' -
display_nameCharcompute='_compute_display_name'store=True -
last_source_scanned_commitChar -
last_target_scanned_commitChar -
maintainer_idsMany2manyrelated='module_branch_id.maintainer_ids' -
migration_path_idMany2one → odoo.migration.pathcomodel_name='odoo.migration.path'index=Trueondelete='cascade'required=True -
migration_scanBooleancompute='_compute_migration_scan'help='Technical field telling if this migration path needs a migration scan.'store=True -
module_branch_idMany2one → odoo.module.branchcomodel_name='odoo.module.branch'index=Trueondelete='cascade'required=Truestring='Source' -
module_idMany2oneindex=Truerelated='module_branch_id.module_id'store=True -
moved_to_genericBooleancompute='_compute_moved_to_generic'help="Specific module now available in a generic repository. This module is maybe not exactly the same, and doesn't have the same scope so it deserves a check during a migration."store=Truestring='Now generic' -
moved_to_ocaBooleancompute='_compute_moved_to_oca'help="Module now available in OCA. This module is maybe not exactly the same, and doesn't have the same scope so it deserves a check during a migration."store=True -
moved_to_standardBooleancompute='_compute_moved_to_standard'help="Module now available in Odoo standard code. This module is maybe not exactly the same, and doesn't have the same scope so it deserves a check during a migration."store=True -
org_idMany2onerelated='module_branch_id.org_id'store=True -
pr_urlCharcompute='_compute_pr_url'store=Truestring='PR URL' -
processCharindex=True -
renamed_to_module_idMany2one → odoo.modulecomodel_name='odoo.module'compute='_compute_renamed_to_module_id'index=Truestore=Truestring='Renamed to' -
replaced_by_module_idMany2one → odoo.modulecomodel_name='odoo.module'compute='_compute_replaced_by_module_id'index=Truestore=Truestring='Replaced by' -
repository_idMany2oneondelete='cascade'related='module_branch_id.repository_id'store=True -
resultsSerialized -
results_textTextcompute='_compute_results_text' -
source_branch_idMany2oneindex=Truerelated='migration_path_id.source_branch_id'store=True -
stateSelectioncompute='_compute_state'index=Trueselection=[('fully_ported', 'Fully Ported'), ('migrate', 'To migrate'), ('port_commits', 'Ported (missing commits?)'), ('review_migration', 'To review'), ('replaced', 'Replaced'), ('moved_to_standard', 'Moved to standard?'), ('moved_to_oca', 'Moved to OCA'), ('moved_to_generic', 'Moved to generic repo')]store=Truestring='Migration Status' -
target_branch_idMany2oneindex=Truerelated='migration_path_id.target_branch_id'store=True -
target_module_branch_idMany2one → odoo.module.branchcomodel_name='odoo.module.branch'compute='_compute_target_module_branch_id'index=Trueondelete='cascade'store=Truestring='Target'
-
force_update(self)Ensure the migration data is updated or will be updated on next scan. -
push_scanned_data(self, module_branch_id, data)@api.model@api.returns('odoo.module.branch.migration')
New fields (13)
-
activeBooleandefault=True -
last_known_module_branch_idMany2one → odoo.module.branchcomodel_name='odoo.module.branch'compute='_compute_last_known_module_branch_id'help='Technical field to check if current selected module is the last one.'string='Last Known Module' -
migration_idsMany2many → odoo.module.branch.migrationcomodel_name='odoo.module.branch.migration'compute='_compute_migration_ids'string='Migrations' -
migration_scanBooleancompute='_compute_migration_scan'help='Technical field telling if this timeline needs a migration scan.' -
module_branch_idMany2one → odoo.module.branchcomodel_name='odoo.module.branch'index=Truerequired=Truestring='Module' -
next_module_branch_idMany2onerelated='module_branch_id.next_odoo_version_module_branch_id'string='New module' -
next_module_idMany2one → odoo.modulecomodel_name='odoo.module'index=Trueondelete='restrict'string='New module name' -
noteHtml -
odoo_version_idMany2oneindex=Truerelated='module_branch_id.branch_id.next_id'store=Truestring='Starting from version' -
odoo_version_sequenceIntegerrelated='odoo_version_id.sequence'store=True -
org_idMany2oneindex=Truerelated='module_branch_id.org_id'store=Truestring='Organization' -
repository_idMany2oneindex=Truerelated='module_branch_id.repository_id'store=Truestring='Repository' -
stateSelectiondefault='renamed'help='Renamed: modules still share the same Git history (it allows to check commits that could be ported)\nReplaced: module has been replaced (or merged) by another one that fulfill the same feature'index=Truerequired=Trueselection=[('renamed', 'has been renamed to'), ('replaced', 'has been replaced by')]
-
action_scan(self) -
create(self, vals_list)@api.model_create_multi -
open_migrations(self) -
unlink(self) -
write(self, vals)@api.model
New fields (1)
-
collect_migration_dataBooleandefault=Falsehelp='Collect migration data based on the configured migration paths.'string='Collect migration data'
-
action_scan(self, branch_ids=None, force=False, raise_exc=True)
Loading…
- Status
- Open migration PR — not merged yet for this version
- CI status
- checks failing
- Open since
- 22 days ago
- Last activity
- 15 days ago
- Repository
- OCA/module-composition-analysis
- Pull request
- [19.0][MIG] odoo_repository_migration (#151)