config: disallow per-package/repo CONFIG_PROTECT
authorZac Medico <zmedico@gentoo.org>
Mon, 27 Jun 2011 00:34:13 +0000 (17:34 -0700)
committerZac Medico <zmedico@gentoo.org>
Mon, 27 Jun 2011 00:34:13 +0000 (17:34 -0700)
In order for reliable etc-update behavior, CONFIG_PROTECT needs to be
a global constant (see bug 370693, comment #8).

pym/portage/package/ebuild/_config/special_env_vars.py
pym/portage/package/ebuild/config.py

index 0214c8675e7545ed4cbdf27ef6c0e6600d844013..3da724d13f1077c96d2baf6eed72b5ca84330b6f 100644 (file)
@@ -165,6 +165,12 @@ environ_filter += [
 
 environ_filter = frozenset(environ_filter)
 
+# Variables that are not allowed to have per-repo or per-package
+# settings.
+global_only_vars = frozenset([
+       "CONFIG_PROTECT",
+])
+
 default_globals = {
        'ACCEPT_LICENSE':           '* -@EULA',
        'ACCEPT_PROPERTIES':        '*',
index c8ea1c86ee7f21c8e09749e9176f1ddc544f6371..c467efe814803cdb80677f6c400d1e4e23ae554b 100644 (file)
@@ -130,6 +130,7 @@ class config(object):
        _environ_filter = special_env_vars.environ_filter
        _environ_whitelist = special_env_vars.environ_whitelist
        _environ_whitelist_re = special_env_vars.environ_whitelist_re
+       _global_only_vars = special_env_vars.global_only_vars
 
        def __init__(self, clone=None, mycpv=None, config_profile_path=None,
                config_incrementals=None, config_root=None, target_root=None,
@@ -1142,6 +1143,8 @@ class config(object):
                                        # make a copy, since we might modify it with
                                        # package.use settings
                                        d = d.copy()
+                                       for k in self._global_only_vars:
+                                               d.pop(k, None)
                                repo_env.append(d)
                                cpdict = self._use_manager._repo_puse_dict.get(repo, {}).get(cp)
                                if cpdict:
@@ -1206,6 +1209,7 @@ class config(object):
 
                protected_pkg_keys = set(pkg_configdict)
                protected_pkg_keys.discard('USE')
+               protected_pkg_keys.update(self._global_only_vars)
 
                # If there are _any_ package.env settings for this package
                # then it automatically triggers config.reset(), in order