This question has been flagged
1 Reply
3951 Views

We are interested in using Odoo but we would need to modify it slightly for our use case, for instance modifying partner by adding fields, and integrating with an external system.
Is it best to fork it or to make a module with the changes in? The changes would be quite specific to our use case and existing system so it's unlikely it would be useful to anyone else as a module/app.
My thinking is that by forking it would be easier to stay up to date with Odoo - we just have to pull in changes from upstream occasionally. It seems like with a module you would end up with lots of stale code that's difficult to update because you've moved it outside the source tree.

Edit: What I mean by this is that let's say you have to modify the code of a large function somewhere. With a module you have to inherit this whole function and overwrite it, but what happens if that function gets changed upstream, like some kind of bug fix? You will never know that it was changed upstream without going and looking at each function you've modified - your app will will always be patching this updated function with the old one contained in your module.

Whereas with forking method, it will be obvious when you pull new changes from upstream because you will get merge conflict with your customizations.

Although I may be completely misunderstanding how modules are created.

It also seems like it would be easier to deploy because you have all the code in one place rather than two.

Any thoughts?

Avatar
Discard
Best Answer

Hi Will,

In my opinion I would go with creating a module that you install on top of the base Odoo. 
I'm not sure what problem you would have that could make your code stale? When you program an extra module on the correct way you will barely ever need to change things, typically only when migrating from one Odoo version to another (for example from V8 to V9).
When you create a new module with your custom code it is nicely separated, which won't be the case when you start adding code in it. By creating a new module that you add in on top it will be very easy to update your Odoo (the default Odoo code). It'll be as simple as running two commands:

git fetch origin 9.0
git reset origin/9.0
That'll be all you need to do to download the newest code from Github. Then a simple database update will apply all new code and views to your database:

./odoo.py -u all
Your custom module could still be maintained on Github in another repository and you could push/pull in the same way as with Odoo. If you'd move in the correct directory in your Odoo system you could even update your custom module through Github, just like with the Odoo base.

Yenthe
Avatar
Discard