diff options
-rw-r--r-- | pym/portage/sets/__init__.py | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/pym/portage/sets/__init__.py b/pym/portage/sets/__init__.py index 7ac6502b7..b892bb308 100644 --- a/pym/portage/sets/__init__.py +++ b/pym/portage/sets/__init__.py @@ -22,10 +22,10 @@ def get_boolean(options, name, default): class SetConfigError(Exception): pass -class SetConfig(SafeConfigParser): +class SetConfig(object): def __init__(self, paths, settings, trees): - SafeConfigParser.__init__(self) - self.read(paths) + self._parser = SafeConfigParser() + self._parser.read(paths) self.errors = [] self.psets = {} self.trees = trees @@ -34,6 +34,7 @@ class SetConfig(SafeConfigParser): self.active = [] def update(self, setname, options): + parser = self._parser self.errors = [] if not setname in self.psets: options["name"] = setname @@ -41,30 +42,32 @@ class SetConfig(SafeConfigParser): # for the unlikely case that there is already a section with the requested setname import random - while setname in self.sections(): + while setname in parser.sections(): setname = "%08d" % random.randint(0, 10**10) - self.add_section(setname) + parser.add_section(setname) for k, v in options.items(): - self.set(setname, k, v) + parser.set(setname, k, v) else: section = self.psets[setname].creator - if self.has_option(section, "multiset") and self.getboolean(section, "multiset"): + if parser.has_option(section, "multiset") and \ + parser.getboolean(section, "multiset"): self.errors.append("Invalid request to reconfigure set '%s' generated by multiset section '%s'" % (setname, section)) return for k, v in options.items(): - self.set(section, k, v) + parser.set(section, k, v) self._parse(update=True) def _parse(self, update=False): if self._parsed and not update: return - for sname in self.sections(): + parser = self._parser + for sname in parser.sections(): # find classname for current section, default to file based sets - if not self.has_option(sname, "class"): + if not parser.has_option(sname, "class"): classname = "portage.sets.files.StaticFileSet" else: - classname = self.get(sname, "class") + classname = parser.get(sname, "class") # try to import the specified class try: @@ -77,11 +80,12 @@ class SetConfig(SafeConfigParser): continue # prepare option dict for the current section optdict = {} - for oname in self.options(sname): - optdict[oname] = self.get(sname, oname) + for oname in parser.options(sname): + optdict[oname] = parser.get(sname, oname) # create single or multiple instances of the given class depending on configuration - if self.has_option(sname, "multiset") and self.getboolean(sname, "multiset"): + if parser.has_option(sname, "multiset") and \ + parser.getboolean(sname, "multiset"): if hasattr(setclass, "multiBuilder"): newsets = {} try: @@ -93,7 +97,8 @@ class SetConfig(SafeConfigParser): if x in self.psets and not update: self.errors.append("Redefinition of set '%s' (sections: '%s', '%s')" % (x, self.psets[x].creator, sname)) newsets[x].creator = sname - if self.has_option(sname, "world-candidate") and not self.getboolean(sname, "world-candidate"): + if parser.has_option(sname, "world-candidate") and \ + not parser.getboolean(sname, "world-candidate"): newsets[x].world_candidate = False self.psets.update(newsets) else: @@ -101,7 +106,7 @@ class SetConfig(SafeConfigParser): continue else: try: - setname = self.get(sname, "name") + setname = parser.get(sname, "name") except NoOptionError: setname = sname if setname in self.psets and not update: @@ -110,7 +115,8 @@ class SetConfig(SafeConfigParser): try: self.psets[setname] = setclass.singleBuilder(optdict, self.settings, self.trees) self.psets[setname].creator = sname - if self.has_option(sname, "world-candidate") and not self.getboolean(sname, "world-candidate"): + if parser.has_option(sname, "world-candidate") and \ + not parser.getboolean(sname, "world-candidate"): self.psets[setname].world_candidate = False except SetConfigError, e: self.errors.append("Configuration error in section '%s': %s" % (sname, str(e))) @@ -127,7 +133,7 @@ class SetConfig(SafeConfigParser): def getSetAtoms(self, setname, ignorelist=None): myset = self.getSets()[setname] myatoms = myset.getAtoms() - + parser = self._parser extend = set() remove = set() intersect = set() @@ -135,12 +141,12 @@ class SetConfig(SafeConfigParser): if ignorelist is None: ignorelist = set() if not setname in ignorelist: - if self.has_option(myset.creator, "extend"): - extend.update(self.get(myset.creator, "extend").split()) - if self.has_option(myset.creator, "remove"): - remove.update(self.get(myset.creator, "remove").split()) - if self.has_option(myset.creator, "intersect"): - intersect.update(self.get(myset.creator, "intersect").split()) + if parser.has_option(myset.creator, "extend"): + extend.update(parser.get(myset.creator, "extend").split()) + if parser.has_option(myset.creator, "remove"): + remove.update(parser.get(myset.creator, "remove").split()) + if parser.has_option(myset.creator, "intersect"): + intersect.update(parser.get(myset.creator, "intersect").split()) ignorelist.add(setname) for n in myset.getNonAtoms(): |