I have a build of DotNetNuke 4.8.2, which has some extensive customizations to the DNN codebase made to it. More and more, my customers are looking into DNN itself and requesting that DNN get updated to the latest version, for both security and functional purposes. Because of the customizations, it's not a matter of simply installing a newer version over the current because I would obviously lose any customizations I make.
I recently took my customized 4.8.2 code, and did a 3-way merge (using KDiff) with the 4.9.5 source and original 4.8.2 source. While it was by no means trivial (it took a few days to get everything in place and working), I was able to successfully upgrade the system to 4.9.5 while leaving my customizations intact.
Looking at 5.x, however, it doesn't seem that this solution will work out too well - it seems that a large number of files and folders have changed places (I'm assuming this is due to the change from "modules" to "extensions"), and it's not something that a simple 3-way merge could easily handle.
Right now each client site we host resides in its own installation of DNN, which is a TFS branch of a central DNN codebase project - that way any changes made in the TFS codebase project can easily be merged into the client sites and propagated out to our servers.
My current plan is to:
- Start a new 5.x codebase from scratch, and manually redo all of the customizations over again
- Migrate sites to that codebase manually on an as-needed basis (that is, physically bring over any skins, custom modules, and content to a brand new branch of the new codebase)
- For future DNN updates, subscribe to the Codeplex server's RSS feed and manually apply the code changes as they come along (this should be manageable, as code changes only seem to come along a couple times a week).
So my questions:
- Is this plan realistic or good in any way, shape, or form?
- What best practices or suggestions do you guys have to making modifications to the DNN source while still keeping your site upgradable to later DNN versions?
- Is there a cleaner way to upgrade a customized 4.x install to 5.x rather than redo all my changes (as I'm planning to at this point?)
- Is there a simple way to automate (or at least simplify) the patches in change 3? Obviously something that completely automates and merges in new changesets from the Codeplex server to my branch is unrealistic, but maybe something that would actually let me merge in code from Codeplex itself instead of just manually going through each file and copy-pasting in changes/