diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-07-31 06:11:18 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-07-31 06:11:18 +0000 |
commit | f342d9635b9da4ab09d7185900d8e5f470593734 (patch) | |
tree | 9e610b94029ac8f9e1d712be14b851fbf77fc163 /pym/portage | |
parent | d4c3415c1049c7c342728307dec39359f3230634 (diff) | |
download | portage-f342d9635b9da4ab09d7185900d8e5f470593734.tar.gz portage-f342d9635b9da4ab09d7185900d8e5f470593734.tar.bz2 portage-f342d9635b9da4ab09d7185900d8e5f470593734.zip |
Add a new @module-rebuild set which emulates the behavior of the
module-rebuild tool. The /lib/modules path is set in sets.conf
via a "files" attribute of an OwnerSet instance. This can be easily
used to define similar sets based on paths on installed files.
svn path=/main/trunk/; revision=11293
Diffstat (limited to 'pym/portage')
-rw-r--r-- | pym/portage/sets/dbapi.py | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/pym/portage/sets/dbapi.py b/pym/portage/sets/dbapi.py index c31db5542..66c014272 100644 --- a/pym/portage/sets/dbapi.py +++ b/pym/portage/sets/dbapi.py @@ -2,7 +2,7 @@ # Distributed under the terms of the GNU General Public License v2 # $Id$ -from portage.versions import catsplit +from portage.versions import catpkgsplit, catsplit from portage.sets.base import PackageSet from portage.sets import SetConfigError, get_boolean @@ -32,6 +32,42 @@ class EverythingSet(PackageSet): return EverythingSet(trees["vartree"].dbapi) singleBuilder = classmethod(singleBuilder) +class OwnerSet(PackageSet): + + _operations = ["merge", "unmerge"] + + description = "Package set which contains all packages " + \ + "that own one or more files." + + def __init__(self, vardb=None, files=None): + super(OwnerSet, self).__init__() + self._db = vardb + self._files = files + + def mapPathsToAtoms(self, paths): + rValue = set() + vardb = self._db + aux_get = vardb.aux_get + aux_keys = ["SLOT"] + for link, p in vardb._owners.iter_owners(paths): + cat, pn = catpkgsplit(link.mycpv)[:2] + slot, = aux_get(link.mycpv, aux_keys) + rValue.add("%s/%s:%s" % (cat, pn, slot)) + return rValue + + def load(self): + self._setAtoms(self.mapPathsToAtoms(self._files)) + + def singleBuilder(cls, options, settings, trees): + if not "files" in options: + raise SetConfigError("no files given") + + import shlex + return cls(vardb=trees["vartree"].dbapi, + files=frozenset(shlex.split(options["files"]))) + + singleBuilder = classmethod(singleBuilder) + class InheritSet(PackageSet): _operations = ["merge", "unmerge"] |