summaryrefslogtreecommitdiffstats
path: root/pym/portage/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/portage/__init__.py')
-rw-r--r--pym/portage/__init__.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index f9dd70d53..a658f90a3 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -987,6 +987,13 @@ def _lazy_iuse_regex(iuse_implicit):
regex = regex.replace("\\.\\*", ".*")
return regex
+class _local_repo_config(object):
+ __slots__ = ('eclass_overrides', 'name',)
+ def __init__(self, name, repo_opts):
+ self.name = name
+ self.eclass_overrides = \
+ tuple(repo_opts.get('eclass-overrides', '').split())
+
class config(object):
"""
This class encompasses the main portage configuration. Data is pulled from
@@ -1180,12 +1187,18 @@ class config(object):
self.user_profile_dir = None
self.local_config = local_config
+ self._local_repo_configs = None
+ self._local_repo_conf_path = None
if clone:
self.incrementals = copy.deepcopy(clone.incrementals)
self.profile_path = copy.deepcopy(clone.profile_path)
self.user_profile_dir = copy.deepcopy(clone.user_profile_dir)
self.local_config = copy.deepcopy(clone.local_config)
+ self._local_repo_configs = \
+ copy.deepcopy(clone._local_repo_configs)
+ self._local_repo_conf_path = \
+ copy.deepcopy(clone._local_repo_conf_path)
self.module_priority = copy.deepcopy(clone.module_priority)
self.modules = copy.deepcopy(clone.modules)
@@ -1628,6 +1641,38 @@ class config(object):
self._plicensedict[cp] = cp_dict
cp_dict[k] = self.expandLicenseTokens(v)
+ self._local_repo_configs = {}
+ self._local_repo_conf_path = \
+ os.path.join(abs_user_config, 'repos.conf')
+ from ConfigParser import SafeConfigParser, ParsingError
+ repo_conf_parser = SafeConfigParser()
+ try:
+ repo_conf_parser.readfp(
+ codecs.open(self._local_repo_conf_path,
+ mode='r', errors='replace'))
+ except EnvironmentError, e:
+ if e.errno != errno.ENOENT:
+ raise
+ del e
+ except ParsingError, e:
+ portage.util.writemsg_level(
+ "!!! Error parsing '%s': %s\n" % \
+ (self._local_repo_conf_path, e),
+ level=logging.ERROR, noiselevel=-1)
+ del e
+ else:
+ repo_defaults = repo_conf_parser.defaults()
+ if repo_defaults:
+ self._local_repo_configs['DEFAULT'] = \
+ _local_repo_config('DEFAULT', repo_defaults)
+ for repo_name in repo_conf_parser.sections():
+ repo_opts = repo_defaults.copy()
+ for opt_name in repo_conf_parser.options(repo_name):
+ repo_opts[opt_name] = \
+ repo_conf_parser.get(repo_name, opt_name)
+ self._local_repo_configs[repo_name] = \
+ _local_repo_config(repo_name, repo_opts)
+
#getting categories from an external file now
categories = [grabfile(os.path.join(x, "categories")) for x in locations]
self.categories = tuple(sorted(