Magento doesn't trigger setup script
I found a nice new, rarely trigger Magento bug.
In one of our projects, we have an example file to create new products:
data-upgrade-example-new-product-import.php
Beside this we had data scripts:
data-install-1.0.1.php
data-upgrade-1.0.0-1.0.1.php
data-upgrade-1.0.5-1.0.6.php
Unfortunately data-upgrade-1.0.5-1.0.6.php
didn't fire.
It took me a while, but I found the problem:
// \Mage_Core_Model_Resource_Setup::_getModifySqlFiles
protected function _getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrFiles)
{
$arrRes = array();
switch ($actionType) {
// ...
case self::TYPE_DB_UPGRADE:
case self::TYPE_DATA_UPGRADE:
uksort($arrFiles, 'version_compare');
foreach ($arrFiles as $version => $file) {
$versionInfo = explode('-', $version);
// In array must be 2 elements: 0 => version from, 1 => version to
if (count($versionInfo)!=2) {
break;
}
in $arrFiles
we find an array with all files in the data dir which match a certain regex in \Mage_Core_Model_Resource_Setup::_getAvailableDataFiles
. In short, when the files starts with data-
.
The problem is, that data-upgrade-example-new-product-import.php
doesn't meet the if (count($versionInfo)!=2)
check and then break is called, which kills the complete loop, but should only be continue;
.
So either we hack the core or rename the data-upgrade-example-new-product-import.php
, I decided for renaming.