protected function doUpgrades($targetVersion, $currentVersion)
 {
     if ($targetVersion === null) {
         $targetVersion = $currentVersion;
         $this->output->notice('Checking for unapplied changes up to the current version [' . $currentVersion . ']');
     } else {
         $this->output->notice('Checking for unapplied changes between current version [' . $currentVersion . '] and requested target version [' . $targetVersion . ']');
     }
     $available = $this->getAvailableSets();
     $applied = $this->getAppliedSets();
     $lastVersion = 0;
     foreach ($available as $version => $changes) {
         if (version_compare($version, $targetVersion) > 0) {
             break;
         }
         $unapplied = array_diff($changes, $applied);
         if (!empty($unapplied)) {
             $this->output->notice('Found unapplied changes in ' . $this->versionPrefix . $version);
             $this->applyChanges($version, $unapplied);
         }
         $lastVersion = $version;
     }
     if (version_compare($currentVersion, $lastVersion) < 0) {
         $this->output->notice('Updating current version to [' . $lastVersion . ']');
         $this->processor->metaVersion('UPDATE _metaVersion SET currentVersion = ?', $lastVersion);
     }
 }