commit:     39d81c514c33733209963110d90ae88020ffcf7d
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Tue Dec  1 02:36:48 2015 +0000
Commit:     Arfrever Frehtes Taifersar Arahesis <arfrever <AT> apache <DOT> org>
CommitDate: Tue Dec  1 02:36:48 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=39d81c51

portage.package.ebuild.config.config.__getitem__(): Partially drop backward 
compatibility for nonexistent keys.

For nonexistent keys:
- When called by Portage scripts, raise KeyError.
- When called by third-party code, print deprecation warning and continue 
returning "".

 pym/_emerge/actions.py               |  6 +++---
 pym/portage/dep/dep_check.py         |  6 ++++--
 pym/portage/package/ebuild/config.py | 29 ++++++++++++++++++++++++-----
 3 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 54e99c1..c3b0b98 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1580,7 +1580,7 @@ def action_info(settings, trees, myopts, myfiles):
        chost = settings.get("CHOST")
 
        append(getportageversion(settings["PORTDIR"], None,
-               settings.profile_path, settings["CHOST"],
+               settings.profile_path, chost,
                trees[settings['EROOT']]["vartree"].dbapi))
 
        header_width = 65
@@ -2810,7 +2810,7 @@ def run_action(emerge_config):
        adjust_configs(emerge_config.opts, emerge_config.trees)
        apply_priorities(emerge_config.target_config.settings)
 
-       for fmt in 
emerge_config.target_config.settings["PORTAGE_BINPKG_FORMAT"].split():
+       for fmt in 
emerge_config.target_config.settings.get("PORTAGE_BINPKG_FORMAT", "").split():
                if not fmt in portage.const.SUPPORTED_BINPKG_FORMATS:
                        if "--pkg-format" in emerge_config.opts:
                                problematic="--pkg-format"
@@ -2827,7 +2827,7 @@ def run_action(emerge_config):
                        emerge_config.target_config.settings["PORTDIR"],
                        None,
                        emerge_config.target_config.settings.profile_path,
-                       emerge_config.target_config.settings["CHOST"],
+                       emerge_config.target_config.settings.get("CHOST"),
                        emerge_config.target_config.trees['vartree'].dbapi) + 
'\n',
                        noiselevel=-1)
                return 0

diff --git a/pym/portage/dep/dep_check.py b/pym/portage/dep/dep_check.py
index 69b358c..9af4e65 100644
--- a/pym/portage/dep/dep_check.py
+++ b/pym/portage/dep/dep_check.py
@@ -653,10 +653,12 @@ def dep_check(depstring, mydbapi, mysettings, use="yes", 
mode=None, myuse=None,
                # matchall behavior to account for profile use.mask/force. The
                # ARCH/archlist code here may be redundant, since the profile
                # really should be handling ARCH masking/forcing itself.
+               arch = mysettings.get("ARCH")
                mymasks.update(mysettings.usemask)
                mymasks.update(mysettings.archlist())
-               mymasks.discard(mysettings["ARCH"])
-               useforce.add(mysettings["ARCH"])
+               if arch:
+                       mymasks.discard(arch)
+                       useforce.add(arch)
                useforce.update(mysettings.useforce)
                useforce.difference_update(mymasks)
 

diff --git a/pym/portage/package/ebuild/config.py 
b/pym/portage/package/ebuild/config.py
index 1827043..da9a936 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2015 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -15,6 +15,7 @@ import platform
 import pwd
 import re
 import sys
+import traceback
 import warnings
 
 from _emerge.Package import Package
@@ -1257,13 +1258,13 @@ class config(object):
                                use = frozenset(settings['PORTAGE_USE'].split())
 
                        values['ACCEPT_LICENSE'] = 
settings._license_manager.get_prunned_accept_license( \
-                               settings.mycpv, use, settings['LICENSE'], 
settings['SLOT'], settings.get('PORTAGE_REPO_NAME'))
+                               settings.mycpv, use, settings.get('LICENSE', 
''), settings.get('SLOT'), settings.get('PORTAGE_REPO_NAME'))
                        values['PORTAGE_RESTRICT'] = self._restrict(use, 
settings)
                        return values
 
                def _restrict(self, use, settings):
                        try:
-                               restrict = set(use_reduce(settings['RESTRICT'], 
uselist=use, flat=True))
+                               restrict = 
set(use_reduce(settings.get('RESTRICT', ''), uselist=use, flat=True))
                        except InvalidDependString:
                                restrict = set()
                        return ' '.join(sorted(restrict))
@@ -2567,7 +2568,23 @@ class config(object):
                try:
                        return self._getitem(key)
                except KeyError:
-                       return '' # for backward compat, don't raise KeyError
+                       if portage._internal_caller:
+                               stack = traceback.format_stack()[:-1] + 
traceback.format_exception(*sys.exc_info())[1:]
+                               try:
+                                       # Ensure that output is written to 
terminal.
+                                       with open("/dev/tty", "w") as f:
+                                               f.write("=" * 96 + "\n")
+                                               f.write("=" * 8 + " Traceback 
for invalid call to portage.package.ebuild.config.config.__getitem__ " + "=" * 
8 + "\n")
+                                               f.writelines(stack)
+                                               f.write("=" * 96 + "\n")
+                               except:
+                                       pass
+                               raise
+                       else:
+                               warnings.warn(_("Passing nonexistent key %r to 
%s is deprecated. Use %s instead.") %
+                                       (key, 
"portage.package.ebuild.config.config.__getitem__",
+                                       
"portage.package.ebuild.config.config.get"), DeprecationWarning, stacklevel=2)
+                               return ""
 
        def _getitem(self, mykey):
 
@@ -2697,7 +2714,9 @@ class config(object):
                for x in self:
                        if x in environ_filter:
                                continue
-                       myvalue = self[x]
+                       myvalue = self.get(x)
+                       if myvalue is None:
+                               continue
                        if not isinstance(myvalue, basestring):
                                writemsg(_("!!! Non-string value in config: 
%s=%s\n") % \
                                        (x, myvalue), noiselevel=-1)

Reply via email to