Пример #1
0
	def __init__(self, paths, settings):
		"""Load config from files in paths"""

		# Defaults for value interpolation.
		parser_defaults = {
			"EPREFIX" : settings["EPREFIX"],
			"EROOT" : settings["EROOT"],
			"PORTAGE_CONFIGROOT" : settings["PORTAGE_CONFIGROOT"],
			"ROOT" : settings["ROOT"],
		}

		try:
			parser = self._parse(paths, parser_defaults)
		except ConfigParserError as e:
			writemsg(
				_("!!! Error while reading binrepo config file: %s\n") % e,
				noiselevel=-1)
			parser = SafeConfigParser(defaults=parser_defaults)

		repos = []
		sync_uris = []
		for section_name in parser.sections():
			repo_data = dict(parser[section_name].items())
			repo_data['name'] = section_name
			repo = BinRepoConfig(repo_data)
			if repo.sync_uri is None:
				writemsg(_("!!! Missing sync-uri setting for binrepo %s\n") % (repo.name,), noiselevel=-1)
				continue

			sync_uri = self._normalize_uri(repo.sync_uri)
			sync_uris.append(sync_uri)
			repo.sync_uri = sync_uri
			if repo.priority is not None:
				try:
					repo.priority = int(repo.priority)
				except ValueError:
					repo.priority = None
			repos.append(repo)

		sync_uris = set(sync_uris)
		current_priority = 0
		for sync_uri in reversed(settings.get("PORTAGE_BINHOST", "").split()):
			sync_uri = self._normalize_uri(sync_uri)
			if sync_uri not in sync_uris:
				current_priority += 1
				sync_uris.add(sync_uri)
				repos.append(BinRepoConfig({
					'name-fallback': self._digest_uri(sync_uri),
					'name': None,
					'priority': current_priority,
					'sync-uri': sync_uri,
				}))

		self._data = OrderedDict((repo.name or repo.name_fallback, repo) for repo in
			sorted(repos, key=lambda repo: (repo.priority or 0, repo.name or repo.name_fallback)))
Пример #2
0
    def _parse(paths, prepos, local_config, default_opts):
        """Parse files in paths to load config"""
        parser = SafeConfigParser(defaults=default_opts)

        recursive_paths = []
        for p in paths:
            if isinstance(p, basestring):
                recursive_paths.extend(_recursive_file_list(p))
            else:
                recursive_paths.append(p)

        read_configs(parser, recursive_paths)

        prepos['DEFAULT'] = RepoConfig("DEFAULT",
                                       parser.defaults(),
                                       local_config=local_config)

        for sname in parser.sections():
            optdict = {}
            for oname in parser.options(sname):
                optdict[oname] = parser.get(sname, oname)

            repo = RepoConfig(sname, optdict, local_config=local_config)
            for o in portage.sync.module_specific_options(repo):
                if parser.has_option(sname, o):
                    repo.set_module_specific_opt(o, parser.get(sname, o))

            # Perform repos.conf sync variable validation
            portage.sync.validate_config(repo, logging)

            # For backward compatibility with locations set via PORTDIR and
            # PORTDIR_OVERLAY, delay validation of the location and repo.name
            # until after PORTDIR and PORTDIR_OVERLAY have been processed.
            prepos[sname] = repo
Пример #3
0
	def _parse(paths, prepos, local_config, default_opts):
		"""Parse files in paths to load config"""
		parser = SafeConfigParser(defaults=default_opts)

		recursive_paths = []
		for p in paths:
			if isinstance(p, basestring):
				recursive_paths.extend(_recursive_file_list(p))
			else:
				recursive_paths.append(p)

		read_configs(parser, recursive_paths)

		prepos['DEFAULT'] = RepoConfig("DEFAULT",
			parser.defaults(), local_config=local_config)

		for sname in parser.sections():
			optdict = {}
			for oname in parser.options(sname):
				optdict[oname] = parser.get(sname, oname)

			repo = RepoConfig(sname, optdict, local_config=local_config)
			for o in portage.sync.module_specific_options(repo):
				if parser.has_option(sname, o):
					repo.set_module_specific_opt(o, parser.get(sname, o))

			# Perform repos.conf sync variable validation
			portage.sync.validate_config(repo, logging)

			# For backward compatibility with locations set via PORTDIR and
			# PORTDIR_OVERLAY, delay validation of the location and repo.name
			# until after PORTDIR and PORTDIR_OVERLAY have been processed.
			prepos[sname] = repo
Пример #4
0
    def _parse(paths, defaults):
        parser = SafeConfigParser(defaults=defaults)
        recursive_paths = []
        for p in paths:
            if isinstance(p, str):
                recursive_paths.extend(_recursive_file_list(p))
            else:
                recursive_paths.append(p)

        read_configs(parser, recursive_paths)
        return parser
Пример #5
0
    def __init__(self, paths, settings, trees):
        self._parser = SafeConfigParser(
            defaults={
                "EPREFIX": settings["EPREFIX"],
                "EROOT": settings["EROOT"],
                "PORTAGE_CONFIGROOT": settings["PORTAGE_CONFIGROOT"],
                "ROOT": settings["ROOT"],
            })

        if _ENABLE_SET_CONFIG:
            read_configs(self._parser, paths)
        else:
            self._create_default_config()

        self.errors = []
        self.psets = {}
        self.trees = trees
        self.settings = settings
        self._parsed = False
        self.active = []
Пример #6
0
#!/bin/env python3
import sys
import collections
from portage.util.configparser import (read_configs, SafeConfigParser)

p = SafeConfigParser({}, collections.defaultdict)
read_configs(p, sys.argv[1:])
first = True
for sect in sorted(p.sections()):
    if first:
        first = False
    else:
        print()
    print("[{}]".format(sect))
    for itm in sorted(p.items(sect)):
        print("{} = {}".format(itm[0], itm[1]))