1 |
Report packages that need to be rebuilt in order to solve slot |
2 |
conflicts, but cannot be rebuilt for some reason. The following |
3 |
reasons will be detected: |
4 |
|
5 |
* matched by --exclude argument |
6 |
* matched by --useoldpkg-atoms argument |
7 |
* ebuild is masked or unavailable |
8 |
|
9 |
Example output: |
10 |
|
11 |
!!! The slot conflict(s) shown above involve package(s) which may need to |
12 |
!!! be rebuilt in order to solve the conflict(s). However, the following |
13 |
!!! package(s) cannot be rebuilt for the reasons shown: |
14 |
|
15 |
(sys-apps/less-480:0/0::gentoo, installed): ebuild is masked or unavailable |
16 |
|
17 |
X-Gentoo-bug: 602964 |
18 |
X-Gentoo-bug-url: https://bugs.gentoo.org/602964 |
19 |
--- |
20 |
pym/_emerge/resolver/slot_collision.py | 37 ++++++++++++++++++++++++++++++++-- |
21 |
1 file changed, 35 insertions(+), 2 deletions(-) |
22 |
|
23 |
diff --git a/pym/_emerge/resolver/slot_collision.py b/pym/_emerge/resolver/slot_collision.py |
24 |
index cfb5885..64147c9 100644 |
25 |
--- a/pym/_emerge/resolver/slot_collision.py |
26 |
+++ b/pym/_emerge/resolver/slot_collision.py |
27 |
@@ -241,6 +241,8 @@ class slot_conflict_handler(object): |
28 |
Print all slot conflicts in a human readable way. |
29 |
""" |
30 |
_pkg_use_enabled = self.depgraph._pkg_use_enabled |
31 |
+ usepkgonly = "--usepkgonly" in self.myopts |
32 |
+ need_rebuild = {} |
33 |
verboseconflicts = "--verbose-conflicts" in self.myopts |
34 |
any_omitted_parents = False |
35 |
msg = self.conflict_msg |
36 |
@@ -394,6 +396,29 @@ class slot_conflict_handler(object): |
37 |
selected_for_display.update( |
38 |
best_matches.values()) |
39 |
elif type in ("soname", "slot"): |
40 |
+ # Check for packages that might need to |
41 |
+ # be rebuilt, but cannot be rebuilt for |
42 |
+ # some reason. |
43 |
+ for ppkg, atom, other_pkg in parents: |
44 |
+ if not ppkg.installed: |
45 |
+ continue |
46 |
+ if not (atom.soname or atom.slot_operator_built): |
47 |
+ continue |
48 |
+ if self.depgraph._frozen_config.excluded_pkgs.findAtomForPackage(ppkg, |
49 |
+ modified_use=self.depgraph._pkg_use_enabled(ppkg)): |
50 |
+ selected_for_display.add((ppkg, atom)) |
51 |
+ need_rebuild[ppkg] = 'matched by --exclude argument' |
52 |
+ elif self.depgraph._frozen_config.useoldpkg_atoms.findAtomForPackage(ppkg, |
53 |
+ modified_use=self.depgraph._pkg_use_enabled(ppkg)): |
54 |
+ selected_for_display.add((ppkg, atom)) |
55 |
+ need_rebuild[ppkg] = 'matched by --useoldpkg-atoms argument' |
56 |
+ elif usepkgonly: |
57 |
+ # This case is tricky, so keep quiet in order to avoid false-positives. |
58 |
+ pass |
59 |
+ elif not self.depgraph._equiv_ebuild_visible(ppkg): |
60 |
+ selected_for_display.add((ppkg, atom)) |
61 |
+ need_rebuild[ppkg] = 'ebuild is masked or unavailable' |
62 |
+ |
63 |
for ppkg, atom, other_pkg in parents: |
64 |
selected_for_display.add((ppkg, atom)) |
65 |
if not verboseconflicts: |
66 |
@@ -611,10 +636,18 @@ class slot_conflict_handler(object): |
67 |
msg.append(colorize("INFORM", |
68 |
"NOTE: Use the '--verbose-conflicts'" |
69 |
" option to display parents omitted above")) |
70 |
- msg.append("\n\n") |
71 |
- else: |
72 |
msg.append("\n") |
73 |
|
74 |
+ if need_rebuild: |
75 |
+ msg.append("\n!!! The slot conflict(s) shown above involve package(s) which may need to\n") |
76 |
+ msg.append("!!! be rebuilt in order to solve the conflict(s). However, the following\n") |
77 |
+ msg.append("!!! package(s) cannot be rebuilt for the reason(s) shown:\n\n") |
78 |
+ for ppkg, reason in need_rebuild.items(): |
79 |
+ msg.append("%s%s: %s\n" % (indent, ppkg, reason)) |
80 |
+ msg.append("\n") |
81 |
+ |
82 |
+ msg.append("\n") |
83 |
+ |
84 |
def get_explanation(self): |
85 |
msg = "" |
86 |
|
87 |
-- |
88 |
2.7.4 |