def package_graph(A, packagedb, ignore_installed=False, reverse=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 if reverse: for name, dep in packagedb.get_rev_deps(x): if ignore_installed: if dep.satisfied_by_installed(): continue if not name in G_f.vertices(): Bp.add(name) G_f.add_dep(name, dep) else: 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, reverse=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 if reverse: for name,dep in packagedb.get_rev_deps(x): if ignore_installed: if dep.satisfied_by_installed(): continue if not name in G_f.vertices(): Bp.add(name) G_f.add_dep(name, dep) else: 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