diff options
author | Brian Dolbec <dolsen@gentoo.org> | 2014-02-09 14:35:09 -0800 |
---|---|---|
committer | Brian Dolbec <dolsen@gentoo.org> | 2014-02-09 14:35:09 -0800 |
commit | 26971672ca3b79d512ad3a88027486a8053b7e17 (patch) | |
tree | 594b72af4e77dcac7ec42b81cc3f410571b37d02 | |
parent | portage.repository.config.RepoConfigLoader.config_string(): Always include DE... (diff) | |
download | portage-26971672ca3b79d512ad3a88027486a8053b7e17.tar.gz portage-26971672ca3b79d512ad3a88027486a8053b7e17.tar.bz2 portage-26971672ca3b79d512ad3a88027486a8053b7e17.zip |
Revert "Add support for the following attributes in layout.conf to allow more"
This reverts commit 4c409a049c394389b1de398db511380e2fed0437.
This needs to be submitted for review and approval.
-rw-r--r-- | man/portage.5 | 76 | ||||
-rw-r--r-- | pym/portage/package/ebuild/_config/MaskManager.py | 10 | ||||
-rw-r--r-- | pym/portage/package/ebuild/_config/UseManager.py | 23 | ||||
-rw-r--r-- | pym/portage/package/ebuild/getmaskingreason.py | 8 | ||||
-rw-r--r-- | pym/portage/repository/config.py | 130 |
5 files changed, 81 insertions, 166 deletions
diff --git a/man/portage.5 b/man/portage.5 index 50905291c..0aac56947 100644 --- a/man/portage.5 +++ b/man/portage.5 @@ -800,9 +800,7 @@ since operations performed by these tools are inherently Specifies names of attributes, which should be forcefully respected by \fBegencache\fR(1), \fBemirrordist\fR(1) and \fBrepoman\fR(1). .br -Valid values: aliases, eclass\-masters, eclass\-overrides, masters, -package.mask\-masters, use.aliases\-masters, use.force\-masters, -use.mask\-masters +Valid values: aliases, eclass\-overrides, masters .RE .I Attributes supported in sections of repositories: @@ -836,24 +834,21 @@ since operations performed by these tools are inherently Specifies names of attributes, which should be forcefully respected by \fBegencache\fR(1), \fBemirrordist\fR(1) and \fBrepoman\fR(1). .br -Valid values: aliases, eclass\-masters, eclass\-overrides, masters, -package.mask\-masters, use.aliases\-masters, use.force\-masters, -use.mask\-masters +Valid values: aliases, eclass\-overrides, masters .TP .B location Specifies location of given repository. .TP -.B masters, eclass\-masters, package.mask\-masters, use.aliases\-masters, use.force\-masters, use.mask\-masters -Specifies master repositories of given repository. See documentation of -\fBlayout.conf\fR file for more details. +.B masters +Specifies master repositories of given repository. .br -Setting these attribute is generally not recommended since resulting changes +Setting this attribute is generally not recommended since resulting changes in eclass inheritance may trigger performance issues due to invalidation of metadata cache. .br -When 'force = ${attribute}' (e.g. 'force = masters') attribute is not set, -\fBegencache\fR(1), \fBemirrordist\fR(1) and \fBrepoman\fR(1) ignore given -attribute, since operations performed by these tools are inherently +When 'force = masters' attribute is not set, \fBegencache\fR(1), +\fBemirrordist\fR(1) and \fBrepoman\fR(1) ignore this attribute, +since operations performed by these tools are inherently \fBnot\fR \fIsite\-specific\fR. .TP .B priority @@ -991,10 +986,9 @@ Specifies information about the repository layout. \fB/etc/portage/repos.conf\fR. Settings in \fBrepos.conf\fR take precedence over settings in \fBlayout.conf\fR, except tools such as \fBrepoman\fR(1) and \fBegencache\fR(1) -ignore "aliases", "eclass\-masters", "eclass\-overrides", "masters", -"package.mask\-masters", "use.aliases\-masters", "use.force\-masters" and -"use.mask\-masters" attributes set in \fBrepos.conf\fR since their operations -are inherently \fBnot\fR \fIsite\-specific\fR. +ignore "aliases", "eclass-overrides" and "masters" attributes set in +\fBrepos.conf\fR since their operations are inherently \fBnot\fR +\fIsite\-specific\fR. .I Format: .nf @@ -1002,7 +996,7 @@ are inherently \fBnot\fR \fIsite\-specific\fR. \- attributes are specified in "${attribute} = ${value}" format .fi -.I Supported attributes: +.I Supported attributes. .RS .RS .TP @@ -1015,14 +1009,6 @@ List of EAPIs which are not allowed in this repo. .BR eapis\-deprecated List of EAPIs which are allowed but generate warnings when used. .TP -.BR eclass\-masters -Names of repositories wherefrom eclasses can be inherited. -.br -This attribute overrides \fBmasters\fR attribute and should be used only when -there is a need to set this attribute to a different value than value of -\fBmasters\fR attribute. See documentation of \fBmasters\fR attribute for more -details. -.TP .BR masters Names of repositories which satisfy dependencies on eclasses and from which settings specified in various repository\-level files (\fBpackage.mask\fR, @@ -1032,15 +1018,6 @@ the repositories that is configured in \fBrepos.conf\fR file. Repositories listed toward the right of the \fBmasters\fR list take precedence over those listed toward the left of the list. .TP -.BR package.mask-masters -Names of repositories wherefrom settings specified in repository\-level -\fBpackage.mask\fR files are inherited. -.br -This attribute overrides \fBmasters\fR attribute and should be used only when -there is a need to set this attribute to a different value than value of -\fBmasters\fR attribute. See documentation of \fBmasters\fR attribute for more -details. -.TP .BR repo\-name " = <value of profiles/repo_name>" The name of this repository (overrides profiles/repo_name if it exists). .TP @@ -1053,35 +1030,6 @@ Boolean value whether we should sign Manifest files in this repo. .BR thin\-manifests " = [true|" false "]" Boolean value whether Manifest files contain only DIST entries. .TP -.BR use.aliases\-masters -Names of repositories wherefrom settings specified in repository\-level -\fBpackage.use.aliases\fR and \fBuse.aliases\fR files are inherited. -.br -This attribute overrides \fBmasters\fR attribute and should be used only when -there is a need to set this attribute to a different value than value of -\fBmasters\fR attribute. See documentation of \fBmasters\fR attribute for more -details. -.TP -.BR use.force\-masters -Names of repositories wherefrom settings specified in repository\-level -\fBpackage.use.force\fR, \fBpackage.use.stable.force\fR, \fBuse.force\fR and -\fBuse.stable.force\fR files are inherited. -.br -This attribute overrides \fBmasters\fR attribute and should be used only when -there is a need to set this attribute to a different value than value of -\fBmasters\fR attribute. See documentation of \fBmasters\fR attribute for more -details. -.TP -.BR use.mask\-masters -Names of repositories wherefrom settings specified in repository\-level -\fBpackage.use.mask\fR, \fBpackage.use.stable.mask\fR, \fuse.mask\fR and -\fBuse.stable.mask\fR files are inherited. -.br -This attribute overrides \fBmasters\fR attribute and should be used only when -there is a need to set this attribute to a different value than value of -\fBmasters\fR attribute. See documentation of \fBmasters\fR attribute for more -details. -.TP .BR use\-manifests " = [" strict "|true|false]" How Manifest files get used. Possible values are "strict" (require an entry for every file), "true" (if an entry exists for a file, enforce it), or "false" diff --git a/pym/portage/package/ebuild/_config/MaskManager.py b/pym/portage/package/ebuild/_config/MaskManager.py index 4358b63e1..aeb04d7c8 100644 --- a/pym/portage/package/ebuild/_config/MaskManager.py +++ b/pym/portage/package/ebuild/_config/MaskManager.py @@ -1,4 +1,4 @@ -# Copyright 2010-2014 Gentoo Foundation +# Copyright 2010-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 __all__ = ( @@ -58,11 +58,7 @@ class MaskManager(object): removals = frozenset(line[0][1:] for line in repo_lines if line[0][:1] == "-") matched_removals = set() - if repo.package_mask_masters is not None: - masters = repo.package_mask_masters - else: - masters = repo.masters - for master in masters: + for master in repo.masters: master_lines = grab_pmask(master.location, master) for line in master_lines: if line[0] in removals: @@ -79,7 +75,7 @@ class MaskManager(object): # It's safe to warn for unmatched removal if masters have not # been overridden by the user, which is guaranteed when # user_config is false (when called by repoman). - if masters: + if repo.masters: unmatched_removals = removals.difference(matched_removals) if unmatched_removals and not user_config: source_file = os.path.join(repo.location, diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py index a65e5bd63..0d00810b6 100644 --- a/pym/portage/package/ebuild/_config/UseManager.py +++ b/pym/portage/package/ebuild/_config/UseManager.py @@ -1,4 +1,4 @@ -# Copyright 2010-2014 Gentoo Foundation +# Copyright 2010-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 __all__ = ( @@ -312,11 +312,8 @@ class UseManager(object): if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO: repos = [] try: - if self.repositories[pkg.repo].use_mask_masters is not None: - masters = self.repositories[pkg.repo].use_mask_masters - else: - masters = self.repositories[pkg.repo].masters - repos.extend(repo.name for repo in masters) + repos.extend(repo.name for repo in + self.repositories[pkg.repo].masters) except KeyError: pass repos.append(pkg.repo) @@ -375,11 +372,8 @@ class UseManager(object): if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO: repos = [] try: - if self.repositories[pkg.repo].use_force_masters is not None: - masters = self.repositories[pkg.repo].use_force_masters - else: - masters = self.repositories[pkg.repo].masters - repos.extend(repo.name for repo in masters) + repos.extend(repo.name for repo in + self.repositories[pkg.repo].masters) except KeyError: pass repos.append(pkg.repo) @@ -434,11 +428,8 @@ class UseManager(object): if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO: repos = [] try: - if self.repositories[pkg.repo].use_aliases_masters is not None: - masters = self.repositories[pkg.repo].use_aliases_masters - else: - masters = self.repositories[pkg.repo].masters - repos.extend(repo.name for repo in masters) + repos.extend(repo.name for repo in + self.repositories[pkg.repo].masters) except KeyError: pass repos.append(pkg.repo) diff --git a/pym/portage/package/ebuild/getmaskingreason.py b/pym/portage/package/ebuild/getmaskingreason.py index 673b40ac9..70a6bf2e6 100644 --- a/pym/portage/package/ebuild/getmaskingreason.py +++ b/pym/portage/package/ebuild/getmaskingreason.py @@ -1,4 +1,4 @@ -# Copyright 2010-2014 Gentoo Foundation +# Copyright 2010-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 __all__ = ['getmaskingreason'] @@ -70,11 +70,7 @@ def getmaskingreason(mycpv, metadata=None, settings=None, locations = [] if pkg.repo in settings.repositories: - if settings.repositories[pkg.repo].package_mask_masters is not None: - masters = settings.repositories[pkg.repo].package_mask_masters - else: - masters = settings.repositories[pkg.repo].masters - for repo in masters + (settings.repositories[pkg.repo],): + for repo in settings.repositories[pkg.repo].masters + (settings.repositories[pkg.repo],): locations.append(os.path.join(repo.location, "profiles")) locations.extend(settings.profiles) locations.append(os.path.join(settings["PORTAGE_CONFIGROOT"], diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py index 952912e48..5e0d05523 100644 --- a/pym/portage/repository/config.py +++ b/pym/portage/repository/config.py @@ -45,9 +45,6 @@ _valid_profile_formats = frozenset( _portage1_profiles_allow_directories = frozenset( ["portage-1-compat", "portage-1", 'portage-2']) -_masters_attributes = dict((x, x.replace("-", "_").replace(".", "_")) for x in - ("masters", "eclass-masters", "package.mask-masters", "use.aliases-masters", "use.force-masters", "use.mask-masters")) - _repo_name_sub_re = re.compile(r'[^\w-]') def _gen_valid_repo(name): @@ -84,12 +81,11 @@ class RepoConfig(object): 'cache_formats', 'create_manifest', 'disable_manifest', 'eapi', 'eclass_db', 'eclass_locations', 'eclass_overrides', 'find_invalid_path_char', 'force', 'format', 'local_config', 'location', - 'main_repo', 'manifest_hashes', 'missing_repo_name', + 'main_repo', 'manifest_hashes', 'masters', 'missing_repo_name', 'name', 'portage1_profiles', 'portage1_profiles_compat', 'priority', 'profile_formats', 'sign_commit', 'sign_manifest', 'sync_cvs_repo', 'sync_type', 'sync_uri', 'thin_manifest', 'update_changelog', - 'user_location', '_eapis_banned', '_eapis_deprecated', '_masters_orig') + \ - tuple(_masters_attributes.values()) + 'user_location', '_eapis_banned', '_eapis_deprecated', '_masters_orig') def __init__(self, name, repo_opts, local_config=True): """Build a RepoConfig with options in repo_opts @@ -111,6 +107,7 @@ class RepoConfig(object): aliases = tuple(aliases.split()) else: aliases = None + self.aliases = aliases if local_config or 'eclass-overrides' in force: @@ -119,21 +116,21 @@ class RepoConfig(object): eclass_overrides = tuple(eclass_overrides.split()) else: eclass_overrides = None - self.eclass_overrides = eclass_overrides + self.eclass_overrides = eclass_overrides # Eclass databases and locations are computed later. self.eclass_db = None self.eclass_locations = None - for attr, underscorized_attr in _masters_attributes.items(): - if local_config or attr in force: - # Masters from repos.conf override layout.conf. - masters = repo_opts.get(attr) - if masters is not None: - masters = tuple(masters.split()) - else: - masters = None - setattr(self, underscorized_attr, masters) + if local_config or 'masters' in force: + # Masters from repos.conf override layout.conf. + masters = repo_opts.get('masters') + if masters is not None: + masters = tuple(masters.split()) + else: + masters = None + + self.masters = masters #The main-repo key makes only sense for the 'DEFAULT' section. self.main_repo = repo_opts.get('main-repo') @@ -220,9 +217,8 @@ class RepoConfig(object): # layout.conf masters may be overridden here if we have a masters # setting from the user's repos.conf - for attr, underscorized_attr in _masters_attributes.items(): - if getattr(self, underscorized_attr) is None: - setattr(self, underscorized_attr, layout_data[attr]) + if self.masters is None: + self.masters = layout_data['masters'] if (local_config or 'aliases' in force) and layout_data['aliases']: aliases = self.aliases @@ -375,10 +371,8 @@ class RepoConfig(object): repo_msg.append(indent + "sync-type: " + self.sync_type) if self.sync_uri: repo_msg.append(indent + "sync-uri: " + self.sync_uri) - for attr, underscorized_attr in _masters_attributes.items(): - masters = getattr(self, underscorized_attr) - if masters: - repo_msg.append(indent + attr + ": " + " ".join(master.name for master in masters)) + if self.masters: + repo_msg.append(indent + "masters: " + " ".join(master.name for master in self.masters)) if self.priority is not None: repo_msg.append(indent + "priority: " + str(self.priority)) if self.aliases: @@ -750,43 +744,36 @@ class RepoConfigLoader(object): for repo_name, repo in prepos.items(): if repo_name == "DEFAULT": continue - for attr, underscorized_attr in _masters_attributes.items(): - masters = getattr(repo, underscorized_attr) - if masters is None: - if attr == 'masters': - if self.mainRepo() and repo_name != self.mainRepo().name: - setattr(repo, underscorized_attr, (self.mainRepo(),)) - else: - setattr(repo, underscorized_attr, ()) + if repo.masters is None: + if self.mainRepo() and repo_name != self.mainRepo().name: + repo.masters = self.mainRepo(), else: - if masters and isinstance(masters[0], RepoConfig): - # This one has already been processed - # because it has an alias. - continue - master_repos = [] - for master_name in 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 %s attribute in '%s'\n") % \ - (master_name, attr, layout_filename), - level=logging.ERROR, noiselevel=-1) - else: - master_repos.append(prepos[master_name]) - setattr(repo, underscorized_attr, tuple(master_repos)) + repo.masters = () + 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) + else: + master_repos.append(prepos[master_name]) + repo.masters = tuple(master_repos) #The 'eclass_overrides' key currently contains repo names. Replace them with the matching repo paths. for repo_name, repo in prepos.items(): if repo_name == "DEFAULT": continue - if repo.eclass_masters is not None: - masters = repo.eclass_masters - else: - masters = repo.masters eclass_locations = [] - eclass_locations.extend(master_repo.location for master_repo in masters) + eclass_locations.extend(master_repo.location for master_repo in repo.masters) # Only append the current repo to eclass_locations if it's not # there already. This allows masters to have more control over # eclass override order, which may be useful for scenarios in @@ -935,24 +922,23 @@ class RepoConfigLoader(object): return repo_name in self.prepos def config_string(self): - str_or_int_attrs = ("format", "location", "main-repo", "priority", "sync-cvs-repo", "sync-type", "sync-uri") - str_tuple_attrs = ("aliases", "eclass-overrides", "force") - repo_config_tuple_attrs = tuple(_masters_attributes.keys()) - attrs = str_or_int_attrs + str_tuple_attrs + repo_config_tuple_attrs + str_or_int_keys = ("format", "location", "main_repo", "priority", "sync_cvs_repo", "sync_type", "sync_uri") + str_tuple_keys = ("aliases", "eclass_overrides", "force") + repo_config_tuple_keys = ("masters",) + keys = str_or_int_keys + str_tuple_keys + repo_config_tuple_keys config_string = "" for repo_name, repo in sorted(self.prepos.items(), key=lambda x: (x[0] != "DEFAULT", x[0])): config_string += "\n[%s]\n" % repo_name - for attr in sorted(attrs): - underscorized_attr = attr.replace("-", "_").replace(".", "_") - if attr == "main-repo" and repo_name != "DEFAULT": + for key in sorted(keys): + if key == "main_repo" and repo_name != "DEFAULT": continue - if getattr(repo, underscorized_attr) is not None: - if attr in str_or_int_attrs: - config_string += "%s = %s\n" % (attr, getattr(repo, underscorized_attr)) - elif attr in str_tuple_attrs: - config_string += "%s = %s\n" % (attr, " ".join(getattr(repo, underscorized_attr))) - elif attr in repo_config_tuple_attrs: - config_string += "%s = %s\n" % (attr, " ".join(x.name for x in getattr(repo, underscorized_attr))) + if getattr(repo, key) is not None: + if key in str_or_int_keys: + config_string += "%s = %s\n" % (key.replace("_", "-"), getattr(repo, key)) + elif key in str_tuple_keys: + config_string += "%s = %s\n" % (key.replace("_", "-"), " ".join(getattr(repo, key))) + elif key in repo_config_tuple_keys: + config_string += "%s = %s\n" % (key.replace("_", "-"), " ".join(x.name for x in getattr(repo, key))) return config_string.lstrip("\n") def load_repository_config(settings, extra_files=None): @@ -986,17 +972,15 @@ def parse_layout_conf(repo_location, repo_name=None): data = {} - # None indicates absence of a masters setting, which later code uses + # None indicates abscence of a masters setting, which later code uses # to trigger a backward compatibility fallback that sets an implicit # master. In order to avoid this fallback behavior, layout.conf can # explicitly set masters to an empty value, which will result in an # empty tuple here instead of None. - for attr in _masters_attributes.keys(): - masters = layout_data.get(attr) - if masters is not None: - masters = tuple(masters.split()) - data[attr] = masters - + masters = layout_data.get('masters') + if masters is not None: + masters = tuple(masters.split()) + data['masters'] = masters data['aliases'] = tuple(layout_data.get('aliases', '').split()) data['allow-provide-virtual'] = \ |