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