commit:     466cc6c60fcf1d56049af7a1d37fc959f6808351
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri May 25 16:07:33 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri May 25 16:10:34 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=466cc6c6

SonameDepsProcessor: fix 'set' object has no attribute 'items' (bug 656492)

Use collections.defaultdict to ensure that requires_map
contains correct defaults.

Fixes: 1364cd44e7a6 ("SonameDepsProcessor: handle internal libs without 
DT_SONAME (bug 646190)")
Bug: https://bugs.gentoo.org/656492

 pym/portage/util/_dyn_libs/soname_deps.py | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/pym/portage/util/_dyn_libs/soname_deps.py 
b/pym/portage/util/_dyn_libs/soname_deps.py
index c6302afc2..544cbc8f1 100644
--- a/pym/portage/util/_dyn_libs/soname_deps.py
+++ b/pym/portage/util/_dyn_libs/soname_deps.py
@@ -3,7 +3,9 @@
 
 from __future__ import unicode_literals
 
+import collections
 import fnmatch
+import functools
 from itertools import chain
 import os
 import re
@@ -33,7 +35,8 @@ class SonameDepsProcessor(object):
                """
                self._provides_exclude = self._exclude_pattern(provides_exclude)
                self._requires_exclude = self._exclude_pattern(requires_exclude)
-               self._requires_map = {}
+               self._requires_map = collections.defaultdict(
+                       functools.partial(collections.defaultdict, set))
                self._provides_map = {}
                self._provides_unfiltered = {}
                self._basename_map = {}
@@ -84,8 +87,7 @@ class SonameDepsProcessor(object):
                        for x in entry.needed:
                                if (self._requires_exclude is None or
                                        self._requires_exclude.match(x) is 
None):
-                                       self._requires_map.setdefault(
-                                               multilib_cat, {}).setdefault(x, 
set()).add(runpaths)
+                                       
self._requires_map[multilib_cat][x].add(runpaths)
 
                if entry.soname:
                        self._provides_unfiltered.setdefault(
@@ -105,7 +107,6 @@ class SonameDepsProcessor(object):
                provides_unfiltered = self._provides_unfiltered
 
                for multilib_cat in set(chain(requires_map, provides_map)):
-                       requires_map.setdefault(multilib_cat, set())
                        provides_map.setdefault(multilib_cat, set())
                        provides_unfiltered.setdefault(multilib_cat, set())
                        for soname, consumers in 
list(requires_map[multilib_cat].items()):

Reply via email to