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>


Reply via email to