summaryrefslogtreecommitdiffstats
path: root/pym/portage/sets/libs.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/portage/sets/libs.py')
-rw-r--r--pym/portage/sets/libs.py50
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)