diff options
Diffstat (limited to 'pym/portage/sets/libs.py')
-rw-r--r-- | pym/portage/sets/libs.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/pym/portage/sets/libs.py b/pym/portage/sets/libs.py new file mode 100644 index 000000000..4ab8a33fe --- /dev/null +++ b/pym/portage/sets/libs.py @@ -0,0 +1,50 @@ +# Copyright 2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +from portage.sets.base import PackageSet +from portage.dbapi.vartree import dblink +from portage.versions import catsplit, catpkgsplit + +import os + +class LibraryConsumerSet(PackageSet): + _operations = ["merge", "unmerge"] + + def __init__(self, vardbapi, debug=False): + super(LibraryConsumerSet, self).__init__() + self.dbapi = vardbapi + self.debug = debug + + def mapPathsToAtoms(self, paths): + rValue = set() + 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 paths.intersection(link.getcontents()): + cat, pn = catpkgsplit(cpv)[:2] + slot = self.dbapi.aux_get(cpv, ["SLOT"])[0] + rValue.add("%s/%s:%s" % (cat, pn, slot)) + return rValue + + +class PreservedLibraryConsumerSet(LibraryConsumerSet): + def load(self): + reg = self.dbapi.plib_registry + consumers = set() + if reg: + for libs in reg.getPreservedLibs().values(): + for lib in libs: + #print lib, self.dbapi.linkmap.findConsumers(lib) + consumers.update(self.dbapi.linkmap.findConsumers(lib)) + else: + return + if not consumers: + return + self._setAtoms(self.mapPathsToAtoms(consumers)) + + def singleBuilder(cls, options, settings, trees): + return PreservedLibraryConsumerSet(trees["vartree"].dbapi) + singleBuilder = classmethod(singleBuilder) |