On 12/18/2016 07:44 AM, Brian Dolbec wrote:
> On Sun, 18 Dec 2016 05:58:45 -0800
> Zac Medico wrote:
>
>> Report packages that need to be rebuilt in order to solve slot
>> conflicts, but cannot be rebuilt for some reason. The following
>> reasons will be detected:
>>
>> * matched by --exclude argument
>> * matched by --useoldpkg-atoms argument
>> * ebuild is masked or unavailable
>>
>> Example output:
>>
>> !!! The slot conflict(s) shown above involve package(s) which may
>> need to !!! be rebuilt in order to solve the conflict(s). However,
>> the following !!! package(s) cannot be rebuilt for the reasons shown:
>>
>> (sys-apps/less-480:0/0::gentoo, installed): ebuild is masked or
>> unavailable
>>
>> X-Gentoo-bug: 602964
>> X-Gentoo-bug-url: https://bugs.gentoo.org/602964
>> ---
>> pym/_emerge/resolver/slot_collision.py | 37
>> -- 1 file changed, 35 insertions(+),
>> 2 deletions(-)
>>
>> diff --git a/pym/_emerge/resolver/slot_collision.py
>> b/pym/_emerge/resolver/slot_collision.py index cfb5885..64147c9 100644
>> --- a/pym/_emerge/resolver/slot_collision.py
>> +++ b/pym/_emerge/resolver/slot_collision.py
>> @@ -241,6 +241,8 @@ class slot_conflict_handler(object):
>> Print all slot conflicts in a human readable way.
>> """
>> _pkg_use_enabled = self.depgraph._pkg_use_enabled
>> +usepkgonly = "--usepkgonly" in self.myopts
>> +need_rebuild = {}
>> verboseconflicts = "--verbose-conflicts" in
>> self.myopts any_omitted_parents = False
>> msg = self.conflict_msg
>> @@ -394,6 +396,29 @@ class slot_conflict_handler(object):
>>
>> selected_for_display.update(
>>
>> best_matches.values())
>> elif type in
>> ("soname", "slot"):
>> +# Check for
>> packages that might need to
>> +# be
>> rebuilt, but cannot be rebuilt for
>> +# some
>> reason.
>> +for ppkg,
>> atom, other_pkg in parents:
>> +if
>> not ppkg.installed:
>> +
>> continue
>> +if
>> not (atom.soname or atom.slot_operator_built):
>> +
>> continue
>> +if
>> self.depgraph._frozen_config.excluded_pkgs.findAtomForPackage(ppkg,
>> +
>> modified_use=self.depgraph._pkg_use_enabled(ppkg)):
>> +
>> selected_for_display.add((ppkg, atom))
>> +
>> need_rebuild[ppkg] = 'matched by --exclude argument'
>> +elif
>> self.depgraph._frozen_config.useoldpkg_atoms.findAtomForPackage(ppkg,
>> +
>> modified_use=self.depgraph._pkg_use_enabled(ppkg)):
>> +
>> selected_for_display.add((ppkg, atom))
>> +
>> need_rebuild[ppkg] = 'matched by --useoldpkg-atoms argument'
>> +elif
>> usepkgonly:
>> +
>> # This case is tricky, so keep quiet in order to avoid
>> false-positives.
>> +
>> pass
>> +elif
>> not self.depgraph._equiv_ebuild_visible(ppkg):
>> +
>> selected_for_display.add((ppkg, atom))
>> +
>> need_rebuild[ppkg] = 'ebuild is masked or unavailable' +
>> for ppkg,
>> atom, other_pkg in parents: selected_for_display.add((ppkg, atom))
>> if
>> not verboseconflicts: @@ -611,10 +636,18 @@ class
>> slot_conflict_handler(object): msg.append(colorize("INFORM",
>> "NOTE: Use the '--verbose-conflicts'"
>> " option to display parents omitted
>> above"))
>> -msg.append("\n\n")
>> -else:
>> msg.append("\n")
>>
>> +if need_rebuild:
>> +msg.append("\n!!! The slot conflict(s) shown
>> above involve package(s) which may need to\n")
>> +msg.append("!!! be rebuilt in order to solve
>> the conflict(s). However, the following\n")
>> +msg.append("!!! package(s) cannot be rebuilt
>> for the reason(s) shown:\n\n")
>> +for ppkg, reason in need_rebuild.items():
>> +msg.append("%s%s: %s\n" % (indent,
>> ppkg, reason))
>> +msg.append("\n")
>> +
>> +msg.append("\n")
>> +
>> def get_explanation(self):
>> msg = ""
>>
>
> Looks good, but did you stay up all night?
Yeah I took an early-evening nap and then found myself up all night.