From d4c3415c1049c7c342728307dec39359f3230634 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 31 Jul 2008 05:45:56 +0000 Subject: [PATCH] Implement a new @live-ebuilds which is generated from installed packages that inherit from know live eclasses such as cvs, darcs, git, mercurial, and subversion. The list of eclasses is controlled by an "inherits" attribute that is configure in sets.conf for and instance of InheritSet. This set serves a purpose similar to the -scm ebuild suffix that has been proposed in GLEP 54. svn path=/main/trunk/; revision=11292 --- cnf/sets.conf | 6 ++++++ pym/portage/sets/dbapi.py | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/cnf/sets.conf b/cnf/sets.conf index f422f5004..13c09a366 100644 --- a/cnf/sets.conf +++ b/cnf/sets.conf @@ -41,3 +41,9 @@ directory = /etc/portage/sets [preserved-rebuild] class = portage.sets.libs.PreservedLibraryConsumerSet world-candidate = False + +# Installed ebuilds that inherit from known live eclasses. +[live-ebuilds] +class = portage.sets.dbapi.InheritSet +world-candidate = False +inherits = "cvs darcs git mercurial subversion" diff --git a/pym/portage/sets/dbapi.py b/pym/portage/sets/dbapi.py index 5352a32f3..c31db5542 100644 --- a/pym/portage/sets/dbapi.py +++ b/pym/portage/sets/dbapi.py @@ -6,7 +6,7 @@ from portage.versions import catsplit from portage.sets.base import PackageSet from portage.sets import SetConfigError, get_boolean -__all__ = ["CategorySet", "EverythingSet"] +__all__ = ["CategorySet", "EverythingSet", "InheritSet"] class EverythingSet(PackageSet): _operations = ["merge", "unmerge"] @@ -32,6 +32,43 @@ class EverythingSet(PackageSet): return EverythingSet(trees["vartree"].dbapi) singleBuilder = classmethod(singleBuilder) +class InheritSet(PackageSet): + + _operations = ["merge", "unmerge"] + + description = "Package set which contains all packages " + \ + "that inherit one or more specific eclasses." + + def __init__(self, vardb=None, inherits=None): + super(InheritSet, self).__init__() + self._db = vardb + self._inherits = inherits + + def load(self): + atoms = [] + inherits = self._inherits + cp_list = self._db.cp_list + aux_get = self._db.aux_get + aux_keys = ["INHERITED", "SLOT"] + for cp in self._db.cp_all(): + for cpv in cp_list(cp): + inherited, slot = aux_get(cpv, aux_keys) + inherited = inherited.split() + if inherits.intersection(inherited): + atoms.append("%s:%s" % (cp, slot)) + + self._setAtoms(atoms) + + def singleBuilder(cls, options, settings, trees): + if not "inherits" in options: + raise SetConfigError("no inherits given") + + inherits = options["inherits"] + return cls(vardb=trees["vartree"].dbapi, + inherits=frozenset(inherits.split())) + + singleBuilder = classmethod(singleBuilder) + class CategorySet(PackageSet): _operations = ["merge", "unmerge"] -- 2.26.2