diff options
-rw-r--r-- | pym/portage/sets/__init__.py | 9 | ||||
-rw-r--r-- | pym/portage/sets/dbapi.py | 35 |
2 files changed, 40 insertions, 4 deletions
diff --git a/pym/portage/sets/__init__.py b/pym/portage/sets/__init__.py index c13c37252..124e68924 100644 --- a/pym/portage/sets/__init__.py +++ b/pym/portage/sets/__init__.py @@ -263,9 +263,12 @@ def make_default_config(settings, trees): sc.set("config", "class", "portage.sets.files.ConfigFileSet") sc.set("config", "multiset", "true") - sc.add_section("user_sets") - sc.set("user_sets", "class", "portage.sets.files.StaticFileSet") - sc.set("user_sets", "multiset", "true") + sc.add_section("user-sets") + sc.set("user-sets", "class", "portage.sets.files.StaticFileSet") + sc.set("user-sets", "multiset", "true") + + sc.add_section("rebuild-needed") + sc.set("rebuild-needed", "class", "portage.sets.dbapi.PreservedLibraryConsumerSet") return sc 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) |