def versions(self):
     pm = getattr(self.context, 'portal_migration')
     result = {}
     result['instance'] = pm.getInstanceVersion()
     result['fs'] = pm.getFileSystemVersion()
     result['equal'] = result['instance'] == result['fs']
     instance_version = normalize_version(result['instance'])
     fs_version = normalize_version(result['fs'])
     result['instance_gt'] = instance_version > fs_version
     result['instance_lt'] = instance_version < fs_version
     result['corelist'] = pm.coreVersions()
     return result
Beispiel #2
0
 def versions(self):
     pm = getattr(self.context, 'portal_migration')
     result = {}
     result['instance'] = pm.getInstanceVersion()
     result['fs'] = pm.getFileSystemVersion()
     result['equal'] = result['instance'] == result['fs']
     instance_version = normalize_version(result['instance'])
     fs_version = normalize_version(result['fs'])
     result['instance_gt'] = instance_version > fs_version
     result['instance_lt'] = instance_version < fs_version
     result['corelist'] = pm.coreVersions()
     return result
Beispiel #3
0
 def versions(self):
     pm = getattr(self.context, "portal_migration")
     result = {}
     result["instance"] = pm.getInstanceVersion()
     result["fs"] = pm.getFileSystemVersion()
     result["equal"] = result["instance"] == result["fs"]
     instance_version = normalize_version(result["instance"])
     fs_version = normalize_version(result["fs"])
     result["instance_gt"] = instance_version > fs_version
     result["instance_lt"] = instance_version < fs_version
     result["corelist"] = pm.coreVersions()
     return result
Beispiel #4
0
 def scan(self):
     self._load_upgrades_directory()
     infos = map(self._build_upgrade_step_info,
                 self._find_upgrade_directories())
     infos.sort(key=lambda info: normalize_version(info['target-version']))
     if len(infos) > 0:
         reduce(self._chain_upgrade_steps, infos)
     return infos
Beispiel #5
0
def flag_profiles_with_outdated_fs_version(upgrades):
    """Flags profiles that contain an upgrade that leads to a destination
    version that is higher than that profile's current filesystem version.

    This usually means someone wrote an upgrade step, but forgot to update the
    version in metadata.xml of the corresponding profile. The upgrade step in
    question will also be flagged.
    """

    for profile in upgrades:
        profile['outdated_fs_version'] = False
        fs_version = normalize_version(profile['version'])

        for upgrade in profile['upgrades']:
            dest_version = normalize_version(upgrade['sdest'])
            upgrade['outdated_fs_version'] = dest_version > fs_version
            if upgrade['outdated_fs_version']:
                profile['outdated_fs_version'] = True

    return upgrades
Beispiel #6
0
def flag_profiles_with_outdated_fs_version(upgrades):
    """Flags profiles that contain an upgrade that leads to a destination
    version that is higher than that profile's current filesystem version.

    This usually means someone wrote an upgrade step, but forgot to update the
    version in metadata.xml of the corresponding profile. The upgrade step in
    question will also be flagged.
    """

    for profile in upgrades:
        profile["outdated_fs_version"] = False
        fs_version = normalize_version(profile["version"])

        for upgrade in profile["upgrades"]:
            dest_version = normalize_version(upgrade["sdest"])
            upgrade["outdated_fs_version"] = dest_version > fs_version
            if upgrade["outdated_fs_version"]:
                profile["outdated_fs_version"] = True

    return upgrades
Beispiel #7
0
    def upgradeProfile(self, profile, olds=[]):
        """ Get upgrade steps and run it. olds can contain a list of dest upgrades to run. """

        def run_upgrade_step(step, source, dest):
            logger.info('Running upgrade step %s (%s -> %s): %s' % (profile, source, dest, step.title))
            step.doStep(self.ps)

        # if olds, we get all steps.
        upgrades = self.ps.listUpgrades(profile, show_old=bool(olds))
        applied_dests = []
        for container in upgrades:
            if isinstance(container, dict):
                if not olds or container['sdest'] in olds:
                    applied_dests.append((normalize_version(container['sdest']), container['sdest']))
                    run_upgrade_step(container['step'], container['ssource'], container['sdest'])
            elif isinstance(container, list):
                for dic in container:
                    if not olds or dic['sdest'] in olds:
                        applied_dests.append((normalize_version(dic['sdest']), dic['sdest']))
                        run_upgrade_step(dic['step'], dic['ssource'], dic['sdest'])
        if applied_dests:
            current_version = normalize_version(self.ps.getLastVersionForProfile(profile))
            highest_version, dest = sorted(applied_dests)[-1]
            # check if highest applied version is higher than current version
            if highest_version > current_version:
                self.ps.setLastVersionForProfile(profile, dest)
                # we update portal_quickinstaller version
                pqi = self.portal.portal_quickinstaller
                try:
                    product = profile.split(':')[0]
                    prod = pqi.get(product)
                    setattr(prod, 'installedversion', pqi.getProductVersion(product))
                except IndexError as e:
                    logger.error("Cannot extract product from profile '%s': %s" % (profile, e))
                except AttributeError as e:
                    logger.error("Cannot get product '%s' from portal_quickinstaller: %s" % (product, e))
Beispiel #8
0
    def upgradeProfile(self, profile, olds=[]):
        """ Get upgrade steps and run it. olds can contain a list of dest upgrades to run. """

        def run_upgrade_step(step, source, dest):
            logger.info('Running upgrade step %s (%s -> %s): %s' % (profile, source, dest, step.title))
            step.doStep(self.ps)

        # if olds, we get all steps.
        upgrades = self.ps.listUpgrades(profile, show_old=bool(olds))
        applied_dests = []
        for container in upgrades:
            if isinstance(container, dict):
                if not olds or container['sdest'] in olds:
                    applied_dests.append((normalize_version(container['sdest']), container['sdest']))
                    run_upgrade_step(container['step'], container['ssource'], container['sdest'])
            elif isinstance(container, list):
                for dic in container:
                    if not olds or dic['sdest'] in olds:
                        applied_dests.append((normalize_version(dic['sdest']), dic['sdest']))
                        run_upgrade_step(dic['step'], dic['ssource'], dic['sdest'])
        if applied_dests:
            current_version = normalize_version(self.ps.getLastVersionForProfile(profile))
            highest_version, dest = sorted(applied_dests)[-1]
            # check if highest applied version is higher than current version
            if highest_version > current_version:
                self.ps.setLastVersionForProfile(profile, dest)
                # we update portal_quickinstaller version
                pqi = self.portal.portal_quickinstaller
                try:
                    product = profile.split(':')[0]
                    prod = pqi.get(product)
                    setattr(prod, 'installedversion', pqi.getProductVersion(product))
                except IndexError, e:
                    logger.error("Cannot extract product from profile '%s': %s" % (profile, e))
                except AttributeError, e:
                    logger.error("Cannot get product '%s' from portal_quickinstaller: %s" % (product, e))