diff options
Diffstat (limited to 'pym/portage/sets/dbapi.py')
-rw-r--r-- | pym/portage/sets/dbapi.py | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/pym/portage/sets/dbapi.py b/pym/portage/sets/dbapi.py index 164027943..ed333ce00 100644 --- a/pym/portage/sets/dbapi.py +++ b/pym/portage/sets/dbapi.py @@ -2,8 +2,11 @@ # Distributed under the terms of the GNU General Public License v2 # $Id$ -from portage.versions import catsplit +from portage.versions import catsplit, catpkgsplit from portage.sets import PackageSet, SetConfigError +from portage.dbapi.vartree import dblink + +import os __all__ = ["CategorySet", "EverythingSet"] @@ -105,3 +108,33 @@ class CategorySet(PackageSet): rValue[myname] = myset return rValue multiBuilder = classmethod(multiBuilder) + +class PreservedLibraryConsumerSet(PackageSet): + _operations = ["merge", "unmerge"] + + def __init__(self, vardbapi): + super(PreservedLibraryConsumerSet, self).__init__() + self.dbapi = vardbapi + + def load(self): + reg = self.dbapi.plib_registry + libmap = self.dbapi.libmap.get() + atoms = set() + consumers = set() + if reg: + for libs in reg.getPreservedLibs().values(): + for lib in libs: + paths = libmap.get(os.path.basename(lib), []) + consumers.update(paths) + for cpv in self.dbapi.cpv_all(): + mysplit = catsplit(cpv) + link = dblink(mysplit[0], mysplit[1], myroot=self.dbapi.root, \ + mysettings=self.dbapi.settings, treetype='vartree', \ + vartree=self.dbapi.vartree) + if consumers.intersection(link.getcontents().keys()): + atoms.add("/".join(catpkgsplit(cpv)[:2])) + self._setAtoms(atoms) + + def singleBuilder(cls, options, settings, trees): + return PreservedLibraryConsumerSet(trees["vartree"].dbapi) + singleBuilder = classmethod(singleBuilder) |