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"] } """ actions = ("systemRestart", "serviceRestart") requirements = dict((action, []) for action in actions) 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) pkg_actions = pkg.get_update_actions(release) for action_name in pkg_actions: if action_name in actions: requirements[action_name].append(pkg.name) return requirements
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
def package_graph(A, packagedb, ignore_installed = False): """Construct a package relations graph. Graph will contain all dependencies of packages A, if ignore_installed option is True, then only uninstalled deps will be added. """ ctx.ui.debug('A = %s' % str(A)) # try to construct a pisi graph of packages to # install / reinstall G_f = pgraph.PGraph(packagedb) # construct G_f # find the "install closure" graph of G_f by package # set A using packagedb for x in A: G_f.add_package(x) B = A #state = {} while len(B) > 0: Bp = set() for x in B: pkg = packagedb.get_package(x) #print pkg for dep in pkg.runtimeDependencies(): if ignore_installed: if dep.satisfied_by_installed(): continue if not dep.package in G_f.vertices(): Bp.add(str(dep.package)) G_f.add_dep(x, dep) B = Bp return G_f
def package_graph(A, packagedb, ignore_installed = False): """Construct a package relations graph. Graph will contain all dependencies of packages A, if ignore_installed option is True, then only uninstalled deps will be added. """ ctx.ui.debug('A = %s' % str(A)) # try to construct a pisi graph of packages to # install / reinstall G_f = pgraph.PGraph(packagedb) # construct G_f # find the "install closure" graph of G_f by package # set A using packagedb for x in A: G_f.add_package(x) B = A #state = {} while len(B) > 0: Bp = set() for x in B: pkg = packagedb.get_package(x) #print pkg for dep in pkg.runtimeDependencies(): if ignore_installed: if dependency.installed_satisfies_dep(dep): continue if not dep.package in G_f.vertices(): Bp.add(str(dep.package)) G_f.add_dep(x, dep) B = Bp return G_f