summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArfrever Frehtes Taifersar Arahesis2011-10-08 21:37:35 (GMT)
committerArfrever Frehtes Taifersar Arahesis2011-10-08 21:37:35 (GMT)
commitab2a6cc357ba3c8272a4a1556e2c0bcd4bee102e (patch)
treea6a25e83956e4de0ade88ec31cadd39990da2ef9
parent8be5cd692c5a49c3dcdee41a3950bda822fdeaf4 (diff)
RepoConfigLoader: Recursively expand masters.
-rw-r--r--pym/portage/repository/config.py48
1 files changed, 27 insertions, 21 deletions
diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 9f4ac2b..8f7e809 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -474,32 +474,38 @@ class RepoConfigLoader(object):
self._prepos_changed = True
self._repo_location_list = []
- #The 'masters' key currently contains repo names. Replace them with the matching RepoConfig.
- for repo_name, repo in prepos.items():
- if repo_name == "DEFAULT":
- continue
+ def get_masters(repo_name, repo, recurse=True):
+ master_repos = []
if repo.masters is None:
if self.mainRepo() and repo_name != self.mainRepo().name:
- repo.masters = self.mainRepo(),
+ master_repos = [self.mainRepo()]
else:
- repo.masters = ()
+ master_repos = []
else:
- if repo.masters and isinstance(repo.masters[0], RepoConfig):
- # This one has already been processed
- # because it has an alias.
- continue
- master_repos = []
- for master_name in repo.masters:
- if master_name not in prepos:
- layout_filename = os.path.join(repo.user_location,
- "metadata", "layout.conf")
- writemsg_level(_("Unavailable repository '%s' " \
- "referenced by masters entry in '%s'\n") % \
- (master_name, layout_filename),
- level=logging.ERROR, noiselevel=-1)
+ for master in repo.masters:
+ if isinstance(master, RepoConfig):
+ master_repos.append(master)
else:
- master_repos.append(prepos[master_name])
- repo.masters = tuple(master_repos)
+ if master not in prepos:
+ layout_filename = os.path.join(repo.user_location,
+ "metadata", "layout.conf")
+ writemsg_level(_("Unavailable repository '%s' " \
+ "referenced by masters entry in '%s'\n") % \
+ (master_name, layout_filename),
+ level=logging.ERROR, noiselevel=-1)
+ else:
+ master = prepos[master]
+ if recurse:
+ master_repos.extend(get_masters(master.name, master) + [master])
+ else:
+ master_repos.append(master)
+ return master_repos
+
+ #The 'masters' key currently contains repo names. Replace them with the matching RepoConfig.
+ for repo_name, repo in prepos.items():
+ if repo_name == "DEFAULT":
+ continue
+ repo.masters = tuple(get_masters(repo_name, repo))
#The 'eclass_overrides' key currently contains repo names. Replace them with the matching repo paths.
for repo_name, repo in prepos.items():