Add a LibraryFileConsumerSet class that can be used to rebuild all packages
authorZac Medico <zmedico@gentoo.org>
Sun, 12 Apr 2009 07:16:18 +0000 (07:16 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 12 Apr 2009 07:16:18 +0000 (07:16 -0000)
that consume one or more given files. Note: This does not detect libtool
archive (*.la) files that consume the specified files (revdep-rebuild is able
to detect them).

svn path=/main/trunk/; revision=13333

pym/portage/sets/libs.py

index 3722c846257cf11df1bad58a3a10a2a48620e74e..1c5067ebc3933588c0041f05788ae30da978ecfd 100644 (file)
@@ -22,6 +22,39 @@ class LibraryConsumerSet(PackageSet):
                        rValue.add("%s/%s:%s" % (cat, pn, slot))
                return rValue
 
+class LibraryFileConsumerSet(LibraryConsumerSet):
+
+       """
+       Note: This does not detect libtool archive (*.la) files that consume the
+       specified files (revdep-rebuild is able to detect them).
+       """
+
+       description = "Package set which contains all packages " + \
+               "that consume the specified library file(s)."
+
+       def __init__(self, vardbapi, files, **kargs):
+               super(LibraryFileConsumerSet, self).__init__(vardbapi, **kargs)
+               self.files = files
+
+       def load(self):
+               consumers = set()
+               for lib in self.files:
+                       consumers.update(self.dbapi.linkmap.findConsumers(lib))
+
+               if not consumers:
+                       return
+               self._setAtoms(self.mapPathsToAtoms(consumers))
+
+       def singleBuilder(cls, options, settings, trees):
+               import shlex
+               files = tuple(shlex.split(options.get("files", "")))
+               if not files:
+                       raise SetConfigError("no files given")
+               debug = get_boolean(options, "debug", False)
+               return LibraryFileConsumerSet(trees["vartree"].dbapi,
+                       files, debug=debug)
+       singleBuilder = classmethod(singleBuilder)
+
 class PreservedLibraryConsumerSet(LibraryConsumerSet):
        def load(self):
                reg = self.dbapi.plib_registry
@@ -48,5 +81,6 @@ class PreservedLibraryConsumerSet(LibraryConsumerSet):
 
        def singleBuilder(cls, options, settings, trees):
                debug = get_boolean(options, "debug", False)
-               return PreservedLibraryConsumerSet(trees["vartree"].dbapi, debug)
+               return PreservedLibraryConsumerSet(trees["vartree"].dbapi,
+                       debug=debug)
        singleBuilder = classmethod(singleBuilder)