def singleBuilder(cls, options, settings, trees): mode = options.get("mode", "older") if str(mode).lower() not in ["newer", "older"]: raise SetConfigError( _("invalid 'mode' value %s (use either 'newer' or 'older')") % mode) try: age = int(options.get("age", "7")) except ValueError as e: raise SetConfigError(_("value of option 'age' is not an integer")) return AgeSet(vardb=trees["vartree"].dbapi, mode=mode, age=age)
def singleBuilder(cls, options, settings, trees): if not "category" in options: raise SetConfigError(_("no category given")) category = options["category"] if not category in settings.categories: raise SetConfigError(_("invalid category name '%s'") % category) repository = cls._builderGetRepository(options, trees.keys()) visible = cls._builderGetVisible(options) return CategorySet(category, dbapi=trees[repository].dbapi, only_visible=visible)
def singleBuilder(self, options, settings, trees): if not "filename" in options: raise SetConfigError(_("no filename specified")) greedy = get_boolean(options, "greedy", False) filename = options["filename"] # look for repository path variables match = self._repopath_match.match(filename) if match: try: filename = self._repopath_sub.sub(trees["porttree"].dbapi.treemap[match.groupdict()["reponame"]], filename) except KeyError: raise SetConfigError(_("Could not find repository '%s'") % match.groupdict()["reponame"]) return StaticFileSet(filename, greedy=greedy, dbapi=trees["vartree"].dbapi)
def singleBuilder(cls, options, settings, trees): files = tuple(portage.util.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)
def singleBuilder(cls, options, settings, trees): if not "files" in options: raise SetConfigError(_("no files given")) exclude_files = options.get("exclude-files") if exclude_files is not None: exclude_files = frozenset(portage.util.shlex_split(exclude_files)) return cls(vardb=trees["vartree"].dbapi, exclude_files=exclude_files, files=frozenset(portage.util.shlex_split(options["files"])))
def singleBuilder(cls, options, settings, trees): metadatadb = options.get("metadata-source", "bintree") if not metadatadb in trees: raise SetConfigError(_("invalid value '%s' for option " "metadata-source") % (metadatadb,)) return cls(trees["vartree"].dbapi, metadatadb=trees[metadatadb].dbapi)
def singleBuilder(cls, options, settings, trees): variable = options.get("variable") if variable is None: raise SetConfigError(_("missing required attribute: 'variable'")) includes = options.get("includes", "") excludes = options.get("excludes", "") if not (includes or excludes): raise SetConfigError(_("no includes or excludes given")) metadatadb = options.get("metadata-source", "vartree") if not metadatadb in trees: raise SetConfigError(_("invalid value '%s' for option metadata-source") % metadatadb) return cls(trees["vartree"].dbapi, metadatadb=trees[metadatadb].dbapi, excludes=frozenset(excludes.split()), includes=frozenset(includes.split()), variable=variable)
def multiBuilder(self, options, settings, trees): rValue = {} directory = options.get("directory", os.path.join(settings["PORTAGE_CONFIGROOT"], USER_CONFIG_PATH)) name_pattern = options.get("name_pattern", "sets/package_$suffix") if not "$suffix" in name_pattern and not "${suffix}" in name_pattern: raise SetConfigError(_("name_pattern doesn't include $suffix placeholder")) for suffix in ["keywords", "use", "mask", "unmask"]: myname = name_pattern.replace("$suffix", suffix) myname = myname.replace("${suffix}", suffix) rValue[myname] = ConfigFileSet(os.path.join(directory, "package."+suffix)) return rValue
def multiBuilder(cls, options, settings, trees): rValue = {} if "categories" in options: categories = options["categories"].split() invalid = set(categories).difference(settings.categories) if invalid: raise SetConfigError(_("invalid categories: %s") % ", ".join(list(invalid))) else: categories = settings.categories repository = cls._builderGetRepository(options, trees.keys()) visible = cls._builderGetVisible(options) name_pattern = options.get("name_pattern", "$category/*") if not "$category" in name_pattern and not "${category}" in name_pattern: raise SetConfigError(_("name_pattern doesn't include $category placeholder")) for cat in categories: myset = CategorySet(cat, trees[repository].dbapi, only_visible=visible) myname = name_pattern.replace("$category", cat) myname = myname.replace("${category}", cat) rValue[myname] = myset return rValue
def singleBuilder(cls, options, settings, trees): vardbapi = trees["vartree"].dbapi mode = options.get("mode", "older") if str(mode).lower() not in ["newer", "older"]: raise SetConfigError(_("invalid 'mode' value %s (use either 'newer' or 'older')") % mode) formats = [] if options.get("package") is not None: formats.append("package") if options.get("filestamp") is not None: formats.append("filestamp") if options.get("seconds") is not None: formats.append("seconds") if options.get("date") is not None: formats.append("date") if not formats: raise SetConfigError(_("none of these options specified: 'package', 'filestamp', 'seconds', 'date'")) elif len(formats) > 1: raise SetConfigError(_("no more than one of these options is allowed: 'package', 'filestamp', 'seconds', 'date'")) setformat = formats[0] if setformat == "package": package = options.get("package") try: cpv = vardbapi.match(package)[0] date, = vardbapi.aux_get(cpv, ('BUILD_TIME',)) date = int(date) except (KeyError, ValueError): raise SetConfigError(_("cannot determine installation date of package %s") % package) elif setformat == "filestamp": filestamp = options.get("filestamp") try: date = int(os.stat(filestamp).st_mtime) except (OSError, ValueError): raise SetConfigError(_("cannot determine 'filestamp' of '%s'") % filestamp) elif setformat == "seconds": try: date = int(options.get("seconds")) except ValueError: raise SetConfigError(_("option 'seconds' must be an integer")) else: dateopt = options.get("date") try: dateformat = options.get("dateformat", "%x %X") date = int(time.mktime(time.strptime(dateopt, dateformat))) except ValueError: raise SetConfigError(_("'date=%s' does not match 'dateformat=%s'") % (dateopt, dateformat)) return DateSet(vardb=vardbapi, date=date, mode=mode)
def _builderGetRepository(cls, options, repositories): repository = options.get("repository", "porttree") if not repository in repositories: raise SetConfigError(_("invalid repository class '%s'") % repository) return repository
def singleBuilder(self, options, settings, trees): if not "command" in options: raise SetConfigError("no command specified") return CommandOutputSet(options["command"])
def singleBuilder(cls, options, settings, trees): if not "files" in options: raise SetConfigError(_("no files given")) return cls(vardb=trees["vartree"].dbapi, files=frozenset(portage.util.shlex_split(options["files"])))
def singleBuilder(self, options, settings, trees): if not "filename" in options: raise SetConfigError(_("no filename specified")) return ConfigFileSet(options["filename"])
def multiBuilder(self, options, settings, trees): rValue = {} directory = options.get( "directory", os.path.join(settings["PORTAGE_CONFIGROOT"], USER_CONFIG_PATH, "sets")) name_pattern = options.get("name_pattern", "${name}") if not "$name" in name_pattern and not "${name}" in name_pattern: raise SetConfigError( _("name_pattern doesn't include ${name} placeholder")) greedy = get_boolean(options, "greedy", False) # look for repository path variables match = self._repopath_match.match(directory) if match: try: directory = self._repopath_sub.sub( trees["porttree"].dbapi.treemap[match.groupdict() ["reponame"]], directory) except KeyError: raise SetConfigError( _("Could not find repository '%s'") % match.groupdict()["reponame"]) try: directory = _unicode_decode(directory, encoding=_encodings['fs'], errors='strict') # Now verify that we can also encode it. _unicode_encode(directory, encoding=_encodings['fs'], errors='strict') except UnicodeError: directory = _unicode_decode(directory, encoding=_encodings['fs'], errors='replace') raise SetConfigError( _("Directory path contains invalid character(s) for encoding '%s': '%s'") \ % (_encodings['fs'], directory)) if os.path.isdir(directory): directory = normalize_path(directory) for parent, dirs, files in os.walk(directory): try: parent = _unicode_decode(parent, encoding=_encodings['fs'], errors='strict') except UnicodeDecodeError: continue for d in dirs[:]: if d[:1] == '.': dirs.remove(d) for filename in files: try: filename = _unicode_decode(filename, encoding=_encodings['fs'], errors='strict') except UnicodeDecodeError: continue if filename[:1] == '.': continue if filename.endswith(".metadata"): continue filename = os.path.join(parent, filename)[1 + len(directory):] myname = name_pattern.replace("$name", filename) myname = myname.replace("${name}", filename) rValue[myname] = StaticFileSet( os.path.join(directory, filename), greedy=greedy, dbapi=trees["vartree"].dbapi) return rValue