On Thu, 16 Mar 2017 14:19:07 -0700 Zac Medico <zmed...@gentoo.org> wrote:
> Fix the _slot_operator_update_probe method to ensure that the > atom_not_selected variable is always properly initialized. This > problem prevented the method from identifying slot operator rebuild > candidates, leading to dependency conflicts and/or missed updates. > For example, this may have triggered the missed llvm update reported > in bug 611742, since these dependencies from the mesa-17.0.1 ebuild > are capable of triggering the problem, when atom_not_selected is not > properly set to True for the second atom: > > || ( > sys-devel/llvm:4[${MULTILIB_USEDEP}] > >=sys-devel/llvm-3.6.0:0[${MULTILIB_USEDEP}] > ) > > X-Gentoo-bug: 612846 > X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=612846 > --- > [PATCH v2] fixes it to handle soname atoms correctly > > pym/_emerge/depgraph.py | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py > index ad94fb7..511944c 100644 > --- a/pym/_emerge/depgraph.py > +++ b/pym/_emerge/depgraph.py > @@ -1895,7 +1895,9 @@ class depgraph(object): > all_candidate_pkgs = None > > for atom in atoms: > - atom_not_selected = False > + # The _select_atoms_probe method is > expensive, so initialization > + # of this variable is only > permformed on demand. > + atom_not_selected = None > > if not atom.package: > unevaluated_atom = None > @@ -1977,8 +1979,8 @@ class depgraph(object): > if selected_atoms is > None: selected_atoms = self._select_atoms_probe( > dep.child.root, > replacement_parent) > - if unevaluated_atom > not in selected_atoms: > - > atom_not_selected = True > + atom_not_selected = > unevaluated_atom not in selected_atoms > + if atom_not_selected: > break > > if not insignificant and \ > @@ -1989,6 +1991,15 @@ class depgraph(object): > (pkg, > unevaluated_atom or atom)) candidate_pkgs.append(pkg) > > + # When unevaluated_atom is None, it > means that atom is > + # an soname atom which is > unconditionally selected, and > + # _select_atoms_probe is not > applicable. > + if atom_not_selected is None and > unevaluated_atom is not None: > + if selected_atoms is None: > + selected_atoms = > self._select_atoms_probe( > + > dep.child.root, replacement_parent) > + atom_not_selected = > unevaluated_atom not in selected_atoms + > if atom_not_selected: > continue > > replacement_candidates.append(candidate_pkg_atoms) Looks good other than 2 typos permfomed and "# an soname" -n -- Brian Dolbec <dolsen>