def buildgraph(self): """ Load the list of installed packages and their dependencies using hawkey, and build the dependency graph and the graph of reverse dependencies. """ sack = dnf.sack.rpmdb_sack(self.base) pkgmap = dict() packages = [] depends = [] rdepends = [] deps = set() providers = set() for i, pkg in enumerate(sack.query()): pkgmap[pkg] = i packages.append(pkg) rdepends.append([]) for i, pkg in enumerate(packages): for req in pkg.requires: sreq = str(req) if sreq.startswith( 'rpmlib(') or sreq == 'solvable:prereqmarker': continue for dpkg in sack.query().filter(provides=req): providers.add(pkgmap[dpkg]) if i not in providers: deps.update(providers) providers.clear() deplist = list(deps) deps.clear() depends.append(deplist) for j in deplist: rdepends[j].append(i) return (packages, depends, rdepends)
def buildgraph(self): """ Load the list of installed packages and their dependencies using hawkey, and build the dependency graph and the graph of reverse dependencies. """ sack = dnf.sack.rpmdb_sack(self.base) pkgmap = dict() packages = [] depends = [] rdepends = [] deps = set() providers = set() for i, pkg in enumerate(sack.query()): pkgmap[pkg] = i packages.append(pkg) rdepends.append([]) for i, pkg in enumerate(packages): for req in pkg.requires: sreq = str(req) if sreq.startswith('rpmlib(') or sreq == 'solvable:prereqmarker': continue for dpkg in sack.query().filter(provides=req): providers.add(pkgmap[dpkg]) if i not in providers: deps.update(providers) providers.clear() deplist = list(deps) deps.clear() depends.append(deplist) for j in deplist: rdepends[j].append(i) return (packages, depends, rdepends)
def installed_but(sack, *args): q = sack.query().filter(reponame__eq=hawkey.SYSTEM_REPO_NAME) return reduce(lambda query, name: query.filter(name__neq=name), args, q)