diff --git a/repos/system_upgrade/common/actors/checkleftoverpackages/libraries/checkleftoverpackages.py b/repos/system_upgrade/common/actors/checkleftoverpackages/libraries/checkleftoverpackages.py index a2e6ecc2a9..dc0999ca3d 100644 --- a/repos/system_upgrade/common/actors/checkleftoverpackages/libraries/checkleftoverpackages.py +++ b/repos/system_upgrade/common/actors/checkleftoverpackages/libraries/checkleftoverpackages.py @@ -1,7 +1,12 @@ import re from leapp.libraries.common.config.version import get_source_major_version -from leapp.libraries.common.rpms import get_installed_rpms, get_leapp_dep_packages, get_leapp_packages +from leapp.libraries.common.rpms import ( + get_installed_rpms, + get_leapp_dep_packages, + get_leapp_packages, + parse_rpm_details +) from leapp.libraries.stdlib import api from leapp.models import InstalledUnsignedRPM, LeftoverPackages, RPM @@ -14,18 +19,18 @@ def process(): if not installed_rpms: return - leftover_pkgs_to_remove = LeftoverPackages() + leftover_pkgs_to_remove = [] unsigned = [pkg.name for pkg in next(api.consume(InstalledUnsignedRPM), InstalledUnsignedRPM()).items] for rpm in installed_rpms: rpm = rpm.strip() if not rpm: continue - try: - name, version, release, epoch, packager, arch, pgpsig = rpm.split('|') - except ValueError: - api.current_logger().warning('Could not parse rpm: {}'.format(rpm)) + + rpm_details = parse_rpm_details(rpm) + if rpm_details is None: continue + name, version, release, epoch, packager, arch, pgpsig = rpm_details version_pattern = r'el(\d+)' match = re.search(version_pattern, release) @@ -34,7 +39,7 @@ def process(): major_version = match.group(1) PKGS_NOT_TO_BE_DELETED = set(LEAPP_PACKAGES + LEAPP_DEP_PACKAGES + unsigned) if int(major_version) <= int(get_source_major_version()) and name not in PKGS_NOT_TO_BE_DELETED: - leftover_pkgs_to_remove.items.append(RPM( + leftover_pkgs_to_remove.append(RPM( name=name, version=version, epoch=epoch, @@ -44,4 +49,4 @@ def process(): pgpsig=pgpsig )) - api.produce(leftover_pkgs_to_remove) + api.produce(LeftoverPackages(items=leftover_pkgs_to_remove)) diff --git a/repos/system_upgrade/common/actors/removeleftoverpackages/actor.py b/repos/system_upgrade/common/actors/removeleftoverpackages/actor.py index c6a16a604d..9aeebd52fb 100644 --- a/repos/system_upgrade/common/actors/removeleftoverpackages/actor.py +++ b/repos/system_upgrade/common/actors/removeleftoverpackages/actor.py @@ -1,7 +1,7 @@ from leapp.actors import Actor from leapp.libraries.actor import removeleftoverpackages from leapp.models import LeftoverPackages, RemovedPackages -from leapp.tags import IPUWorkflowTag, RPMUpgradePhaseTag +from leapp.tags import ExperimentalTag, IPUWorkflowTag, RPMUpgradePhaseTag class RemoveLeftoverPackages(Actor): @@ -16,7 +16,7 @@ class RemoveLeftoverPackages(Actor): name = 'remove_leftover_packages' consumes = (LeftoverPackages, ) produces = (RemovedPackages, ) - tags = (RPMUpgradePhaseTag, IPUWorkflowTag, ) + tags = (RPMUpgradePhaseTag, IPUWorkflowTag, ExperimentalTag,) def process(self): removeleftoverpackages.process() diff --git a/repos/system_upgrade/common/actors/removeleftoverpackages/libraries/removeleftoverpackages.py b/repos/system_upgrade/common/actors/removeleftoverpackages/libraries/removeleftoverpackages.py index c861361594..7853dd16ea 100644 --- a/repos/system_upgrade/common/actors/removeleftoverpackages/libraries/removeleftoverpackages.py +++ b/repos/system_upgrade/common/actors/removeleftoverpackages/libraries/removeleftoverpackages.py @@ -1,5 +1,5 @@ from leapp.libraries.common.rhsm import skip_rhsm -from leapp.libraries.common.rpms import get_installed_rpms +from leapp.libraries.common.rpms import get_installed_rpms, parse_rpm_details from leapp.libraries.stdlib import api, CalledProcessError, run from leapp.models import LeftoverPackages, RemovedPackages, RPM @@ -23,11 +23,11 @@ def _get_removed_packages(installed_rpms): removed = list(set(installed_rpms) - set(get_installed_rpms())) for pkg in removed: - try: - name, version, release, epoch, packager, arch, pgpsig = pkg.split('|') - except ValueError: - api.current_logger().warning('Could not parse rpm: {}'.format(pkg)) + rpm_details = parse_rpm_details(pkg) + if rpm_details is None: continue + name, version, release, epoch, packager, arch, pgpsig = rpm_details + removed_packages.append(RPM( name=name, version=version, diff --git a/repos/system_upgrade/common/libraries/rpms.py b/repos/system_upgrade/common/libraries/rpms.py index dde4d2b6f4..742aee9d71 100644 --- a/repos/system_upgrade/common/libraries/rpms.py +++ b/repos/system_upgrade/common/libraries/rpms.py @@ -65,6 +65,21 @@ def get_installed_rpms(): return [] +def parse_rpm_details(rpm): + """ + Parse rpm details. In case of failure, log a warning and return None. + + :param rpm: string with rpm details separated by '|' + """ + + try: + name, version, release, epoch, packager, arch, pgpsig = rpm.split('|') + return name, version, release, epoch, packager, arch, pgpsig + except ValueError: + stdlib.api.current_logger().warning('Could not parse rpm: {}, skipping.'.format(rpm)) + return None + + def create_lookup(model, field, keys, context=stdlib.api): """ Create a lookup set from one of the model fields.