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)