RepoConfig: allow repos.conf 'masters' override
authorZac Medico <zmedico@gentoo.org>
Sat, 8 Oct 2011 22:51:45 +0000 (15:51 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 8 Oct 2011 22:52:34 +0000 (15:52 -0700)
This give the user the power to override 'masters' settings from
layout.conf, is case they want use a different set of masters to
satisfy dependencies. This is especially important now that recursive
expansion of masters is supported since commit
ab2a6cc357ba3c8272a4a1556e2c0bcd4bee102e, so that the user can avoid
pulling in unwanted repositories as dependencies, if necessary.

Also, empty 'masters' settings are now supported, in case a repo
wants to avoid implicit inheritance of PORTDIR settings like
package.mask.

man/portage.5
pym/portage/repository/config.py

index 1d9545ab6a721a1d6459d24c7c725242be9d5487..860803b4ce1ebab5881a5fe13e42160305625d40 100644 (file)
@@ -714,6 +714,13 @@ aliases = foo bar
 [kde-testing]
 # override the metadata/layout.conf masters setting from the kde-testing repo
 masters = gentoo kde
+
+[python]
+# override the metadata/layout.conf masters setting from the python repo,
+# so that settings won't be inherited from those masters, and so that
+# those master repos won't be required as dependencies (the user must
+# ensure that any required dependencies such as eclasses are satisfied)
+masters =
 .fi
 .RE
 .TP
index 8f7e80969228f5f12b9698081290254ae59b2a00..1d042ac0e953410414790349eaf5d30b4c5c7328 100644 (file)
@@ -66,8 +66,11 @@ class RepoConfig(object):
                #Locations are computed later.
                self.eclass_locations = None
 
-               #Masters are only read from layout.conf.
-               self.masters = None
+               # Masters from repos.conf override layout.conf.
+               masters = repo_opts.get('masters')
+               if masters is not None:
+                       masters = tuple(masters.split())
+               self.masters = masters
 
                #The main-repo key makes only sense for the 'DEFAULT' section.
                self.main_repo = repo_opts.get('main-repo')
@@ -358,12 +361,19 @@ class RepoConfigLoader(object):
                        layout_file = KeyValuePairFileLoader(layout_filename, None, None)
                        layout_data, layout_errors = layout_file.load()
 
-                       masters = layout_data.get('masters')
-                       if masters and masters.strip():
-                               masters = masters.split()
-                       else:
-                               masters = None
-                       repo.masters = masters
+                       # Only set masters here if is None, so that repos.conf settings
+                       # will override those from layout.conf. This gives the
+                       # user control over inherited repositories and their settings
+                       # (the user must ensure that any required dependencies such as
+                       # eclasses are satisfied).
+                       if repo.masters is None:
+                               masters = layout_data.get('masters')
+                               if masters is not None:
+                                       # We support empty masters settings here, in case a
+                                       # repo wants to avoid implicit inheritance of PORTDIR
+                                       # settings like package.mask.
+                                       masters = tuple(masters.split())
+                               repo.masters = masters
 
                        aliases = layout_data.get('aliases')
                        if aliases and aliases.strip():