Add get_package_requirements method to pisi api
This commit is contained in:
+33
@@ -578,6 +578,39 @@ def calculate_download_size(packages):
|
|||||||
total_size, cached_size = pisi.operations.helper.calculate_download_sizes(packages)
|
total_size, cached_size = pisi.operations.helper.calculate_download_sizes(packages)
|
||||||
return total_size, cached_size
|
return total_size, cached_size
|
||||||
|
|
||||||
|
def get_package_requirements(packages):
|
||||||
|
"""
|
||||||
|
Returns a dict with two keys - systemRestart, serviceRestart - with package lists as their values
|
||||||
|
@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":[] }
|
||||||
|
installdb = pisi.db.installdb.InstallDB()
|
||||||
|
packagedb = pisi.db.packagedb.PackageDB()
|
||||||
|
|
||||||
|
for i_pkg in packages:
|
||||||
|
try:
|
||||||
|
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)
|
||||||
|
|
||||||
|
return requirements
|
||||||
|
|
||||||
# ****** Danger Zone Below! Tressspassers' eyes will explode! ********** #
|
# ****** Danger Zone Below! Tressspassers' eyes will explode! ********** #
|
||||||
|
|
||||||
def package_graph(A, packagedb, ignore_installed = False):
|
def package_graph(A, packagedb, ignore_installed = False):
|
||||||
|
|||||||
Reference in New Issue
Block a user