From be1379c93529e5a4cee178b5781c3eb563ab7bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20A=C5=9F=C4=B1c=C4=B1?= Date: Thu, 4 Mar 2010 12:26:59 +0000 Subject: [PATCH] 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. --- pisi/api.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) 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