diff --git a/pisi/api.py b/pisi/api.py index d624b892..0d04e13b 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -585,15 +585,17 @@ def get_package_requirements(packages): @param packages: list of package names -> list_of_strings >>> lu = pisi.api.list_upgrades() - + >>> requirements = pisi.api.get_package_requirements(lu) >>> print requirements >>> { "systemRestart":["kernel", "module-alsa-driver"], "serviceRestart":["mysql-server", "memcached", "postfix"] } """ - - requirements = { "systemRestart":[], "serviceRestart":[] } + + actions = ("systemRestart", "serviceRestart") + requirements = dict((action, []) for action in actions) + installdb = pisi.db.installdb.InstallDB() packagedb = pisi.db.packagedb.PackageDB() @@ -602,13 +604,17 @@ def get_package_requirements(packages): pkg = packagedb.get_package(i_pkg) except Exception: #FIXME: Should catch RepoItemNotFound exception pass - + (version, release, build) = installdb.get_version(i_pkg) - - updates = [i for i in pkg.history if pisi.version.Version(i.release) > pisi.version.Version(release)] - for key in ["systemRestart", "serviceRestart"]: - if pisi.util.any(lambda i:key in i.required_actions(), updates): - requirements[key].append(pkg.name) + release = int(release) + + for update in pkg.history: + if int(update.release) <= release: + break + + for action in update.required_actions(): + if action in actions: + requirements[action].append(pkg.name) return requirements