spirit wrote:After many years, what's the real reason that the team haven't developed a system to upgrade OpenCart, without burning the brain? Seems like this is the real Achilles heel.
Because it's extremely difficult for a few different reasons.
1. Major code changes. OpenCart has had a LOT of extreme changes to some parts... and they weren't gracefully adjusted along the way. No deprecation period to give time for people to transition. Just hard cuts. Sometimes multiple cuts in different directions. So now you have to try to think about all those different setups and combine them into a common update process.
2. Bugs in previous versions that got absorbed by the upgrade process.The initial 2.0.x upgrade script caused a lot of invisible problems with the setting 'group' table changing to 'code'. Only it wasn't "changed".. instead the new field was added and the old field was left there. But the main code didn't filter on the group or code column.. so it was returning 2 results for each setting.. and it was a race condition on which value you'd get because the second copy overwrote the first. But there was no error because it was just a graceful overwrite. It wasn't until people started seeing weird stuff like editing the wording of things like HTML module or bank transfer and then when they go back to edit, they'd see the old text. That is because it was saving the new text into the 'code' column, but when it loaded it pulled from the 'group' column. So extra special code had to be added for that.
3. Server configurations. Everyone thinks it's a breeze to run a hosting company but there are so many ways to skin that cat. So sometimes when you want to try to handle folder moves or file renames but the server prevents scripts from doing it and causes all sorts of unforeseen issues. You just cannot guess all the possible scenarios and you'll go blue in the face trying to add a bunch of excess code conditionals around them.
4. 3rd party addons and customizations made to the database. A popular issue is with multilingual url alias mods. This mod adds a new "language_id" column to the url_alias table. And that is fine when used with the vQmod script that alters the query to filter by language_id. But when you remove that script as part of the upgrade, now the site crashes because the default query doesn't filter on language id and doesn't expect to receive multiple records for a single url. Again these are random and can't be guessed. You just have to deal with them when you come across them.
So it is unfortunately not an easy process when talking about a project like opencart that has a lot of moving parts.