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
diff --git a/pym/portage/util/_dyn_libs/soname_deps.py b/pym/portage/util/_dyn_libs/soname_deps.py
index c6302af..544cbc8 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 @@
"""
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 @@
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 @@
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()):