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
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
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
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
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
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))
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))