Optimize get_package_requirements a little

Since release number are integers, we don't have to use Version objects.
Also piksemel returns tags in the order they are written. So we don't
have to iterate all update tags.
This commit is contained in:
Fatih Aşıcı
2010-03-04 12:26:59 +00:00
parent b1b8f790eb
commit be1379c935
+15 -9
View File
@@ -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