diff --git a/doc/index.rst.inc b/doc/index.rst.inc index 842888aecb2..31ac2494a48 100644 --- a/doc/index.rst.inc +++ b/doc/index.rst.inc @@ -6,6 +6,7 @@ OpenERP Server :maxdepth: 1 import + module-versioning test-framework Changed in 7.0 @@ -17,4 +18,4 @@ Changed in 7.0 api/user_img_specs api/need_action_specs api/font_style - api/field_level_acl \ No newline at end of file + api/field_level_acl diff --git a/doc/module-versioning.rst b/doc/module-versioning.rst new file mode 100644 index 00000000000..7a4c127d6d8 --- /dev/null +++ b/doc/module-versioning.rst @@ -0,0 +1,69 @@ +.. _module_versioning: + +Module versioning +================= + +OpenERP has been developed with modularity in mind: OpenERP should be flexible +enough so it can be adopted by any enterprise, of any size and in any market. +By using modules one can adapt OpenERP in many different ways: from completely +different business to smaller, company-specific changes. + +As modules (and the core framework itself) evolve, it is necessary to identify +modules by their version so a sensible set of modules can be chosen for a +particular deployment. + +There are two trends re-inforcing each others. Firstly OpenERP s.a. will work +on a smaller number of official modules and let the community handles more and +more development. Secondly all those modules will receive greater exposure on +`OpenERP Apps`_ where each module will be owned by a single author. + +The solution advocated by OpenERP is straightforward and aims to avoid the +`dependency hell`_. In particular we don't want to deal with versioned +dependencies (i.e. a module depends on a specific version of another module). + +For each stable release (e.g. OpenERP 6.1, or OpenERP 7.0) or, said in other +words, for each major version, there is only one (major) version of each +module. The minor version is bumped for bug fixes but is otherwise not +important here. + +Making variations on some business needs must be done by creating new modules, +possibly depending on previously written modules. If depending on a module +proves too difficult, you can write a new module (not a new _version_). But +generally Python is flexible enough that depending on the existing module +should work. + +For the next major version, refactoring modules can be done and similar +functionalities can be brought together in a better module. + +.. _`OpenERP Apps`: http://apps.openerp.com/ + +.. _`dependency hell`: http://en.wikipedia.org/wiki/Dependency_hell + +Example +------- + +Whenever a new module is developed or must evolve, the above versioning policy +should be respected. + +A particular concern one can face when deploying OpenERP to multiple customers +is now detailed as an example to provide a few guidelines. The hypotethical +situation is as follow. A partner needs to create a new module, called ``M``, for a +customer. Shortly after (but still within a typical OpenERP release cycle, so +there is no chance to bump the version number except for bug fixes), ``M`` must be +adapted for another customer. + +The correct way to handle it is to leave ``M`` as it is and create a new module, +say called ``X``, that depends on ``M`` for the second customer. Both modules have the +same version (i.e. 6.1 or 7.0, targeting the corresponding OpenERP version). + +If leaving ``M`` as it is is not possible (which should be very rare as Python +is incredibly flexible), the ``X`` module for the new customer can depend on a +new module ``N``, derived from ``M``. At this point, ``N`` is a new, +differently named module. It is not a ``M`` module with a increased version +number. Your goal should be to make ``N`` as close as possible to ``M``, so +that at the next version of OpenERP, the first customer can switch to ``N`` +instead of ``M`` (or include the changes in a new version of ``M``). At that +point you are in the ideal situation: you have a module ``N`` for one customer, +and a module ``X`` depending on N to account for the differences between those +two customers. + diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index d390d235f92..d4e7098c282 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -43,12 +43,22 @@ The kernel of OpenERP, needed for all installation. 'res/res_config.xml', 'data/res.country.state.csv', 'ir/wizard/wizard_menu_view.xml', - 'ir/ir.xml', - 'ir/ir_translation_view.xml', - 'ir/ir_filters.xml', + 'ir/ir_actions.xml', + 'ir/ir_attachment_view.xml', 'ir/ir_config_parameter_view.xml', - 'ir/workflow/workflow_view.xml', + 'ir/ir_cron_view.xml', + 'ir/ir_filters.xml', + 'ir/ir_mail_server_view.xml', + 'ir/ir_model_view.xml', + 'ir/ir_rule_view.xml', + 'ir/ir_sequence_view.xml', + 'ir/ir_translation_view.xml', + 'ir/ir_ui_menu_view.xml', + 'ir/ir_ui_view_view.xml', + 'ir/ir_values_view.xml', + 'ir/osv_memory_autovacuum.xml', 'ir/report/ir_report.xml', + 'ir/workflow/workflow_view.xml', 'module/module_view.xml', 'module/module_data.xml', 'module/module_report.xml', diff --git a/openerp/addons/base/ir/__init__.py b/openerp/addons/base/ir/__init__.py index ba8b785f39d..c6034e0f7ee 100644 --- a/openerp/addons/base/ir/__init__.py +++ b/openerp/addons/base/ir/__init__.py @@ -20,8 +20,6 @@ ############################################################################## import ir_model -import ir_model_constraint -import ir_model_relation import ir_sequence import ir_needaction import ir_ui_menu diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml deleted file mode 100644 index 491bc9c8131..00000000000 --- a/openerp/addons/base/ir/ir.xml +++ /dev/null @@ -1,1791 +0,0 @@ - - - - - - - ir.values.form.action - ir.values - -
- - - - - - - - - - - - - -
-
-
- - - ir.values.form.defaults - ir.values - -
- - - - - - - - - - - - - -
-
-
- - - ir.values.tree.action - ir.values - - - - - - - - - - - ir.values.search.action - ir.values - - - - - - - - - - - - - Action Bindings - ir.actions.act_window - ir.values - form - tree,form - - [('key','=','action')] - {'default_key':'action'} - - - - tree - - - - - - form - - - - - - User-defined Defaults - ir.actions.act_window - ir.values - form - tree,form - - [('key','=','default')] - {'default_key':'default','default_key2':''} - - - - tree - - - - - - form - - - - - - - - ir.sequence.form - ir.sequence - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - ir.sequence.tree - ir.sequence - - - - - - - - - - - - - - - - ir.sequence.search - ir.sequence - - - - - - - - - - - Sequences - ir.actions.act_window - ir.sequence - form - - {'active_test': False} - - - - - - - - ir.sequence.type.form - ir.sequence.type - -
- - - - - - -
-
-
- - - ir.sequence.type.tree - ir.sequence.type - - - - - - - - - - ir.sequence.type.search - ir.sequence.type - - - - - - - - - Sequence Codes - ir.actions.act_window - ir.sequence.type - form - tree,form - - - - - - - - ir.actions.actions - ir.actions.actions - -
- - - - - -
-
-
- - ir.actions.actions.tree - ir.actions.actions - - - - - - - - - ir.actions.actions.search - ir.actions.actions - - - - - - - - - Actions - ir.actions.act_window - ir.actions.actions - form - - - - - - - - - - - - ir.actions.report.xml - ir.actions.report.xml - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - ir.actions.report.xml.tree - ir.actions.report.xml - - - - - - - - - - - - - ir.actions.report.xml.search - ir.actions.report.xml - - - - - - - - - - - - Reports - ir.actions.act_window - ir.actions.report.xml - form - - - - - - - ir.actions.windows.tree - ir.actions.act_window - - - - - - - - - - - - - ir.actions.windows.form - ir.actions.act_window - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - ir.actions.windows.search - ir.actions.act_window - - - - - - - - - - - - - Window Actions - ir.actions.act_window - ir.actions.act_window - form - - - - - tree - - - - - - form - - - - - - - ir.actions.wizard.tree - ir.actions.wizard - - - - - - - - - - - ir.actions.wizard - ir.actions.wizard - -
- - - - - - -
- - - ir.actions.wizard.search - ir.actions.wizard - - - - - - - - - Wizards - ir.actions.act_window - ir.actions.wizard - form - - - - - - - - ir.ui.view - ir.ui.view - -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - ir.ui.view.tree - ir.ui.view - - - - - - - - - - - - - - ir.ui.view.search - ir.ui.view - - - - - - - - - - - - - - - - - - Views - ir.actions.act_window - ir.ui.view - - Views allows you to personalize each view of OpenERP. You can add new fields, move fields, rename them or delete the ones that you do not need. - - - - - - - ir.ui.view.custom.search - ir.ui.view.custom - - - - - - - - - ir.ui.view.custom.form - ir.ui.view.custom - -
- - - - - - - -
-
-
- - ir.ui.view.custom.tree - ir.ui.view.custom - - - - - - - - - Customized Views - ir.actions.act_window - ir.ui.view.custom - Customized views are used when users reorganize the content of their dashboard views (via web client) - - - - - - - ir.attachment.view - ir.attachment - -
- - -
-
-
- - ir.attachment.view.tree - ir.attachment - - - - - - - - - - - - - ir.attachment.search - ir.attachment - - - - - - - - - - - - - - - - - - - - - - Attachments - ir.actions.act_window - ir.attachment - form - - - - - - - - ir.model.form - ir.model - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -