#!/usr/bin/python """ Report any packages in world which have direct dependencies also in world """ __version__ = (0,3,0) import os import sys sys.path.insert(0, '/usr/lib/gentoolkit/pym') os.environ['PORTAGE_CALLER'] = 'repoman' import portage TREE = portage.db["/"]["vartree"] import gentoolkit def get_versions_installed(pkg): """ Return a list containt versions of pkg installed (in cpv format) may be an empty list. """ return TREE.dbapi.match(pkg) def get_world(): """Return a list of all packages in world""" _file = sys.stdin _list = [line.strip() for line in _file] return _list def get_deps(pkg): """Return a list of all packages depending on pkg (directly)""" deps = set() for cpv in get_versions_installed(pkg): gentoolkit_pkg = gentoolkit.Package(cpv) rdeps = [i[2] for i in gentoolkit_pkg.get_runtime_deps() if not i[2].startswith('virtual/')] for rdep in rdeps: split = portage.pkgsplit(rdep) if split is not None: deps.add(split[0]) else: deps.add(rdep) pdeps = [i[2] for i in gentoolkit_pkg.get_postmerge_deps() if not i[2].startswith('virtual/')] for pdep in pdeps: split = portage.pkgsplit(pdep) if split is not None: deps.add(split[0]) else: deps.add(pdep) #print deps #command= '/usr/bin/equery -q -C d %s' % pkg #pipe = os.popen(command, 'r') #_list = [portage.pkgsplit(line.strip())[0] for line in pipe] return deps if __name__ == '__main__': world = get_world() for pkg in world: deps = get_deps(pkg) for dep in deps: if (dep != pkg) and (dep in world): print '%(pkg)s already depends on %(dep)s' % locals()