Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
	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)
Exemplo n.º 3
0
	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)
Exemplo n.º 4
0
	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)
Exemplo n.º 5
0
	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"])))
Exemplo n.º 6
0
	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)
Exemplo n.º 7
0
	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)
Exemplo n.º 8
0
	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
Exemplo n.º 9
0
	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
Exemplo n.º 10
0
	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)
Exemplo n.º 11
0
	def _builderGetRepository(cls, options, repositories):
		repository = options.get("repository", "porttree")
		if not repository in repositories:
			raise SetConfigError(_("invalid repository class '%s'") % repository)
		return repository
Exemplo n.º 12
0
	def singleBuilder(self, options, settings, trees):
		if not "command" in options:
			raise SetConfigError("no command specified")
		return CommandOutputSet(options["command"])
Exemplo n.º 13
0
	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"])))
Exemplo n.º 14
0
	def singleBuilder(self, options, settings, trees):
		if not "filename" in options:
			raise SetConfigError(_("no filename specified"))
		return ConfigFileSet(options["filename"])
Exemplo n.º 15
0
Arquivo: files.py Projeto: ezc/portage
    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