@Denis Regarding the migration process the best is 0: comment code that drop the data 1: get a copy of prod database 2: uninstall the big module 3: do some sql request 4: install the new modules 5: do some sql request 6: until it's not perfect go back to step 1
You can take a look to this path for commenting code === modified file 'openerp/addons/base/ir/ir_model.py' --- openerp/addons/base/ir/ir_model.py 2014-05-15 14:25:51 +0000 +++ openerp/addons/base/ir/ir_model.py 2014-06-24 07:00:56 +0000 @@ -164,7 +164,7 @@ if model.state != 'manual': raise except_orm(_('Error'), _("Model '%s' contains module data and cannot be removed!") % (model.name,)) - self._drop_table(cr, user, ids, context) + #self._drop_table(cr, user, ids, context) res = super(ir_model, self).unlink(cr, user, ids, context) if not context.get(MODULE_UNINSTALL_FLAG): # only reload pool for normal unlink. For module uninstall the @@ -323,7 +323,7 @@ any(field.state != 'manual' for field in self.browse(cr, user, ids, context)): raise except_orm(_('Error'), _("This column contains module data and cannot be removed!")) - self._drop_column(cr, user, ids, context) + #self._drop_column(cr, user, ids, context) res = super(ir_model_fields, self).unlink(cr, user, ids, context) if not context.get(MODULE_UNINSTALL_FLAG): cr.commit() === modified file 'openerp/addons/base/module/module.py' --- openerp/addons/base/module/module.py 2014-04-10 09:58:17 +0000 +++ openerp/addons/base/module/module.py 2014-06-24 07:00:56 +0000 @@ -437,8 +437,8 @@ ir_model_constraint = self.pool.get('ir.model.constraint') modules_to_remove = [m.name for m in self.browse(cr, uid, ids, context)] modules_to_remove_ids = [m.id for m in self.browse(cr, uid, ids, context)] - constraint_ids = ir_model_constraint.search(cr, uid, [('module', 'in', modules_to_remove_ids)]) - ir_model_constraint._module_data_uninstall(cr, uid, constraint_ids, context) +# constraint_ids = ir_model_constraint.search(cr, uid, [('module', 'in', modules_to_remove_ids)]) +# ir_model_constraint._module_data_uninstall(cr, uid, constraint_ids, context) ir_model_data._module_data_uninstall(cr, uid, modules_to_remove, context) self.write(cr, uid, ids, {'state': 'uninstalled'}) return True Hope this will help you 2014-07-04 23:05 GMT+02:00 Raphael Valyi <rva...@gmail.com>: > hello Denis, > > generally speaking it's hard to believe merging is the solution. > > Random things you can do in your case: > > Sometimes you can declare a fake dependency like A < B even if it's not > true, but just to fix the load order. This is a hack, but probably better > than going for spaghetti code at large. > > Sometimes if A and B both override some method and that loading order ca > be a problem. Sometimes, creating yet a new module C that both A and B will > depend on, with a proper abstraction in C can fix the problem. > > Sometimes, if a core method is so badly designed that really it's > impossible to extend it multiple times, then consider that some base module > "monkey patch" the offensive bad method and transforms it into a decent > citizens for overriders. <subliminal_message> You know it's why I mad at > trying to get these kind of no-brainer changes in the core before the > release https://github.com/odoo/odoo/pull/915/files </subliminal_message> > <subliminal_message> and hell that one two > https://github.com/odoo/odoo/pull/913 </subliminal_message> > > If monkey patching is too hard or if there is indertermination between > modules order that would introduce the monkey patch, well it's even less > critical to patch the core codebase with surgery patches that you properly > keep under version control so that the core methods get decent to override. > This is a hack, but again, better than going for spaghetti code. > > Unit testing the modules is great. > But eventually you can add functional tests in the top level "profile" > module so that you ensure some tests are running with everything installed. > > You can also test with tools outside from the OpenERP runtime (via RPC) so > you can test different installation scenario. Tools like OERPScenario or > Rspec/Cucumber if you use Ooor can do these kind of tricks. > > > So you see, doing sustainable Odoo customization is sadly nearly an art of > its own. But I believe it makes all the difference between projects that > will work and others that will die. > > > All right, back to the game ;-) > > > -- > Raphaël Valyi > Founder and consultant > http://twitter.com/rvalyi <http://twitter.com/#!/rvalyi> > +55 21 3942-2434 > www.akretion.com > > > > > On Fri, Jul 4, 2014 at 4:58 PM, Denis Karataev <dskarat...@gmail.com> > wrote: > >> Hello Raphael, >> >> Thank you for your warning, maybe you're right. But I can explain why we >> decided to merge modules. Before we preferred to make 1 change = 1 module. >> And now we have many modules that inherit same parts of code in original >> modules. Also as all these modules aren't depend on each other, on >> different installations they have different sequence of installation time. >> Because all they depend only on original module, the system doesn't know >> what to install first, what to install second, etc. So now we have many >> "patches" for same code. Yes, inheritance mechanism works good and all this >> code works right, but we have 2 problems: >> >> 1. it became difficult to track all these small changes between modules. >> Often we don't remember all places of these changes when we're wrining >> module for new change of same original code. So developer have to find it >> all first and after that to think how to write new change in best way >> >> 2. more important: now we write tests for every module, and test result >> OK or FAIL depends on order of installing modules. For example if module A >> will be installed first, tests for module A will pass OK, but if module B >> will be installed first and then module A, in this case module A inherits >> already not original module but inheritance looks like this >> "original->module B->module A". But module A doesn't know about changes in >> module B. So we have FAIL result of tests in this case. >> >> Maybe you could recommend how to win in this situation? Thank you! >> >> >> 2014-07-05 2:43 GMT+07:00 Raphael Valyi <rva...@gmail.com>: >> >> Hello Denis, >>> >>> before all, I strongly recommend against merging several modules into a >>> single module! >>> >>> Why do I think this is extremely bad: >>> >>> By merging modules you'll destroy the information about the >>> responsibilities of each part of the customization. >>> That is you will create a nightmare for future migration. >>> >>> Indeed, when customizations are modular instead, when you migrate to a >>> new version, it will be way easier to migrate the code of modules one by >>> one according to the dependency order. >>> You also give you a better chance that as the years are passing, may be >>> some OCA or other quality module would fulfill some of your customization >>> requirements so that you can keep the volume of customization under control >>> and swap some custom module by some community maintained module. >>> >>> You know, in several years, the worst case of OpenERP installations I >>> have ever seen were all these installation with a single module of 5000 >>> lines or more. Everytime I have been confronted to such situation it ended >>> with a "sorry, we won't be able to rescue your project, see with somebody >>> else" and most of the time the fool guy ended up abandoning OpenERP because >>> no fireman would ever take the risk to maintain a monolithic codebase. >>> >>> Now if you should really move modules around, well you should be ready >>> for SQL fighting. The tools of Openupgrade can also help you. But make no >>> mistake this is all quite involved. >>> >>> The fact that unstalling a module kills the module datastructure is >>> something that has been introduced in v7. Eventually you can hack in the >>> code to avoid that as it was in previous versions. I'm not convinced this >>> change was an improvement. >>> >>> Good luck though. >>> >>> -- >>> Raphaël Valyi >>> Founder and consultant >>> http://twitter.com/rvalyi <http://twitter.com/#!/rvalyi> >>> +55 21 3942-2434 >>> www.akretion.com >>> >>> >>> >>> >>> On Fri, Jul 4, 2014 at 4:29 PM, Denis Karataev <dskarat...@gmail.com> >>> wrote: >>> >>>> Hello community! >>>> >>>> We'd like to merge all modules that we developed inside same project to >>>> one module. So we should have 1 module = 1 project. Now it's about 25 >>>> modules and we'd like to move code from all them to one folder, one module. >>>> >>>> But I don't understand how to do it? When I uninstall old modules it >>>> removes data from database. But how can I install new module without >>>> uninstalling old? It duplicates old modules. >>>> >>>> What is your recommendation? >>>> >>>> Thanks! >>>> >>>> -- >>>> Denis Karataev. >>>> >>>> _______________________________________________ >>>> Mailing list: https://launchpad.net/~openerp-community >>>> Post to : openerp-community@lists.launchpad.net >>>> Unsubscribe : https://launchpad.net/~openerp-community >>>> More help : https://help.launchpad.net/ListHelp >>>> >>>> >>> >> >> >> -- >> Denis Karataev. >> > > > _______________________________________________ > Mailing list: https://launchpad.net/~openerp-community > Post to : openerp-community@lists.launchpad.net > Unsubscribe : https://launchpad.net/~openerp-community > More help : https://help.launchpad.net/ListHelp > >
_______________________________________________ Mailing list: https://launchpad.net/~openerp-community Post to : openerp-community@lists.launchpad.net Unsubscribe : https://launchpad.net/~openerp-community More help : https://help.launchpad.net/ListHelp