def repo_storage(self): """ Get the repo storage driver instance. Raise RepoStorageException if there is a configuration problem """ if self._repo_storage is None: storage_cls = portage.load_mod(self._select_storage_module()) self._repo_storage = _sync_methods(storage_cls(self.repo, self.spawn_kwargs)) return self._repo_storage
def repo_storage(self): """ Get the repo storage driver instance. Raise RepoStorageException if there is a configuration problem """ if self._repo_storage is None: storage_cls = portage.load_mod(self._select_storage_module()) self._repo_storage = _sync_methods( storage_cls(self.repo, self.spawn_kwargs)) return self._repo_storage
def _parse(self, update=False): if self._parsed and not update: return parser = self._parser for sname in parser.sections(): # find classname for current section, default to file based sets if not parser.has_option(sname, "class"): classname = "portage._sets.files.StaticFileSet" else: classname = parser.get(sname, "class") if classname.startswith('portage.sets.'): # The module has been made private, but we still support # the previous namespace for sets.conf entries. classname = classname.replace('sets', '_sets', 1) # try to import the specified class try: setclass = load_mod(classname) except (ImportError, AttributeError): try: setclass = load_mod("portage._sets." + classname) except (ImportError, AttributeError): self.errors.append(_("Could not import '%(class)s' for section " "'%(section)s'") % {"class": classname, "section": sname}) continue # prepare option dict for the current section optdict = {} 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 parser.has_option(sname, "multiset") and \ parser.getboolean(sname, "multiset"): if hasattr(setclass, "multiBuilder"): newsets = {} try: newsets = setclass.multiBuilder(optdict, self.settings, self.trees) except SetConfigError as e: self.errors.append(_("Configuration error in section '%s': %s") % (sname, str(e))) continue for x in newsets: 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 parser.has_option(sname, "world-candidate") and \ parser.getboolean(sname, "world-candidate"): newsets[x].world_candidate = True self.psets.update(newsets) else: self.errors.append(_("Section '%(section)s' is configured as multiset, but '%(class)s' " "doesn't support that configuration") % {"section": sname, "class": classname}) continue else: try: setname = parser.get(sname, "name") except NoOptionError: setname = sname if setname in self.psets and not update: self.errors.append(_("Redefinition of set '%s' (sections: '%s', '%s')") % (setname, self.psets[setname].creator, sname)) if hasattr(setclass, "singleBuilder"): try: self.psets[setname] = setclass.singleBuilder(optdict, self.settings, self.trees) self.psets[setname].creator = sname if parser.has_option(sname, "world-candidate") and \ parser.getboolean(sname, "world-candidate"): self.psets[setname].world_candidate = True except SetConfigError as e: self.errors.append(_("Configuration error in section '%s': %s") % (sname, str(e))) continue else: self.errors.append(_("'%(class)s' does not support individual set creation, section '%(section)s' " "must be configured as multiset") % {"class": classname, "section": sname}) continue self._parsed = True