.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
    :alt: License: AGPL-3
.. image:: https://img.shields.io/badge/python-3.6-blue.svg
    :alt: Python support: 3.6
.. image:: https://app.travis-ci.com/OCA/odoo-module-migrator.svg?branch=master
    :target: https://app.travis-ci.com/OCA/odoo-module-migrator

====================
odoo-module-migrator
====================

``odoo-module-migrator`` is a python3 library that allows you to automatically migrate
module code to make it compatible with newer Odoo version.
for exemple:

* renaming ``__openerp__.py`` file into ``__manifest__.py``
* removing ``# -*- encoding: utf-8 -*-`` since V11.0
* replacing ``openerp`` import by ``odoo`` import
* removing ``migrations`` folders
* changing <act_window> to <record model="ir.actions.window">
* ...

This library will so:

* (optionnaly) get commits from the old branch (if format-patch is enabled)
* apply automatically changes. (renaming, replacing, etc.)
* commit your changes.
* Display warnings or errors in log if your code belong obsolete code patterns.

This project is about migrating code. If you're looking for database data migration
between Odoo versions, take a look
at the https://github.com/OCA/OpenUpgrade project.

**INFO log**

It mentions that the lib automatically changed something.
*A priori* you have nothing to do. For example, for a migration from 8.0 to
a more recent version:

.. code-block:: shell

    12:38:54 INFO Renaming file: '/my_module/__openerp__.py' by '/my_module/__manifest__.py'

**WARNING log**

It mentions that you should check something. There is *maybe* something to do
to make the module working. For exemple:

.. code-block:: shell

    19:37:55 WARNING Replaced dependency of 'account_analytic_analysis' by 'contract' (Moved to OCA/contract)


**ERROR log**

It mentions that you should change something in your code. It not, the module
will not work *for sure*. (not installable, or generating error during the
execution)

For example, if you have a 8.0 module that depends on 'account_anglo_saxon',
that disappeared in more recent version, the following log will be displayed

.. code-block:: shell

    12:38:54 ERROR Depends on removed module 'account_anglo_saxon'

Development and improvment
==========================

If you want to improve or complete this library, please read the
``DEVELOP.rst`` file and the 'Roadmap / Know issues' sections.

Installation
============

.. code-block:: shell

    pip3 install odoo-module-migrator


Usage
=====

Using Format Patch command
--------------------------

(Recommanded by the OCA)

If you want to migrate an Odoo module from a version 8.0 to 12.0, for exemple
the module ``pos_order_pricelist_change`` in the OCA "pos" repository.

.. code-block:: shell

    git clone https://github.com/OCA/pos -b 12.0
    cd pos
    odoo-module-migrate
        --directory             ./
        --modules               pos_order_pricelist_change
        --init-version-name     8.0
        --target-version-name  12.0
        --format-patch

Without format Patch command
----------------------------

(Mainly for your custom modules)

if you have created a new branch (for exemple 12.0) based on your 10.0 branch
you can run the following command

.. code-block:: shell

    odoo-module-migrate
        --directory             /path/to/repository
        --modules               module_1,module_2,module_3
        --init-version-name     10.0
        --target-version-name   12.0

This tools will operate the changes for each module.

Available arguments
-------------------

+--------------------------+----------+-----------------+-------------------------------------------------------+
|name                      | shortcut | Options         | description                                           |
+==========================+==========+=================+=======================================================+
|``--directory``           |``-d``    | Default:        | Local folder that belongs the module(s) to migrate.   |
|                          |          | ``./``          |                                                       |
+--------------------------+----------+-----------------+-------------------------------------------------------+
|``--init-version-name``   | ``-i``   | Required        | Initial version of your module(s) you want to migrate.|
|                          |          |                 |                                                       |
+--------------------------+----------+-----------------+-------------------------------------------------------+
|``--target-version-name`` | ``-t``   | Default:        | Final Version you want to migrate.                    |
|                          |          | the laster odoo |                                                       |
|                          |          | version         |                                                       |
+--------------------------+----------+-----------------+-------------------------------------------------------+
|``--modules``             | ``-m``   | Default:        | Module(s) to migrate. Note if format-patch option is  |
|                          |          | All modules     | enabled, you have to provide only one module.         |
|                          |          | present in the  |                                                       |
|                          |          | directory       |                                                       |
+--------------------------+----------+-----------------+-------------------------------------------------------+
|``--format-patch``        | ``-fp``  | disabled        | Recover code, using git format-patch command.         |
|                          |          | by default      |                                                       |
+--------------------------+----------+-----------------+-------------------------------------------------------+
|``--remote-name``         | ``-rn``  | Default:        | Name of the main remote, used by format-patch command.|
|                          |          | ``origin``      |                                                       |
+--------------------------+----------+-----------------+-------------------------------------------------------+
|``--log-level``           | ``-ll``  | Default:        | Possible value: ``DEBUG``, ``INFO``, ``WARNING``, etc.|
|                          |          | ``INFO``        |                                                       |
+--------------------------+----------+-----------------+-------------------------------------------------------+
|``--log-path``            | ``-lp``  | Default:        | If set, the logs will not be displayed at screen,     |
|                          |          | False           | but stored in a file                                  |
+--------------------------+----------+-----------------+-------------------------------------------------------+
|``--no-commit``           | ``-nc``  | Default:        | If set the library will not git add and git commit    |
|                          |          | commit          | changes.                                              |
+--------------------------+----------+-----------------+-------------------------------------------------------+


Roadmap / Know issues
=====================

* replacement of tag <openerp><data> by <odoo> will fail in the case
  where there are many <data> occurency.
  We could fix that, using ``lxml`` lib instead of regular expression.

* Add a call to ``pre-commit run -a``, if pre-commit is present in the
  repository.

Changes
=======

0.3.2 (December 04, 2019)
-------------------------
* [REM] Remove black call. (Add call to more generic tool pre-commit
  in the roadmap)
* [IMP] Add --no-verify option in ``git commit`` to avoid to fail if pre-commit
  is present
* [REF] Refactor ``_execute_shell`` function


0.2.0 (October 13, 2019)
------------------------
* Second release


0.1.4 (October 12, 2019)
------------------------
* Test

[ADD] test

* framework

[ADD] ``--file-path`` option.
[ADD] ``_DEPRECATED_MODULES`` syntax.

* migration script

[FIX] Incorrect syntax of regular expression, to remove python 2 header
[IMP] first release of all the steps from 8.0 to 13.0


0.1.3 (October 11, 2019)
------------------------

* framework

[ADD] ``--no-commit`` option that disable git add and git commit calls
[FIX] do not commit many times if migration has many steps.
[REF] remove useless commented code
[REF] create _commit_changes() and _replace_in_file() functions

* Meta

[FIX] github url of the project in setup.py
[ADD] Travis file + links to coveralls
[ADD] test_requirements.txt

* migration script

[ADD] 12.0 to 13.0 and add a warning if reference to web_settings_dashboard are found. cortesy @yelizariev
[ADD] bump version in manifest file
[ADD] set installable to True


0.1.2 (October 10, 2019)
------------------------

* First release

Credits
=======

Authors
-------

* GRAP, Groupement Régional Alimentaire de Proximité (http://www.grap.coop)

Contributors
------------

* Sylvain LE GAL (https://www.twitter.com/legalsylvain)
