Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r13852 - main/trunk/pym/_emerge
Date: Tue, 28 Jul 2009 23:27:55
Message-Id: E1MVw5I-0001HT-U0@stork.gentoo.org
1 Author: zmedico
2 Date: 2009-07-28 23:27:52 +0000 (Tue, 28 Jul 2009)
3 New Revision: 13852
4
5 Modified:
6 main/trunk/pym/_emerge/depgraph.py
7 Log:
8 When backtracking due to an unsatisfied dependency, show a normal unsatisfied
9 dependency message for the given atom. Thanks to Thomas Sachau
10 <tommy@g.o> for reporting.
11
12
13 Modified: main/trunk/pym/_emerge/depgraph.py
14 ===================================================================
15 --- main/trunk/pym/_emerge/depgraph.py 2009-07-25 09:33:18 UTC (rev 13851)
16 +++ main/trunk/pym/_emerge/depgraph.py 2009-07-28 23:27:52 UTC (rev 13852)
17 @@ -276,6 +276,8 @@
18 '--debug' not in self._frozen_config.myopts:
19 return
20
21 + # In order to minimize noise, show only the highest
22 + # missed update from each SLOT.
23 missed_updates = {}
24 for pkg, mask_reasons in \
25 self._dynamic_config._runtime_pkg_mask.iteritems():
26 @@ -284,24 +286,63 @@
27 # want to show available updates.
28 continue
29 if pkg.slot_atom in missed_updates:
30 - other_pkg, parent_atoms = missed_updates[pkg.slot_atom]
31 + other_pkg, mask_type, parent_atoms = \
32 + missed_updates[pkg.slot_atom]
33 if other_pkg > pkg:
34 continue
35 for mask_type, parent_atoms in mask_reasons.iteritems():
36 if not parent_atoms:
37 continue
38 - missed_updates[pkg.slot_atom] = (pkg, parent_atoms)
39 + missed_updates[pkg.slot_atom] = (pkg, mask_type, parent_atoms)
40 break
41
42 if not missed_updates:
43 return
44
45 + missed_update_types = {}
46 + for pkg, mask_type, parent_atoms in missed_updates.itervalues():
47 + missed_update_types.setdefault(mask_type,
48 + []).append((pkg, parent_atoms))
49 +
50 + self._show_missed_update_slot_conflicts(
51 + missed_update_types.get("slot conflict"))
52 +
53 + self._show_missed_update_unsatisfied_dep(
54 + missed_update_types.get("missing dependency"))
55 +
56 + def _show_missed_update_unsatisfied_dep(self, missed_updates):
57 +
58 + if not missed_updates:
59 + return
60 +
61 + write = sys.stderr.write
62 +
63 + for pkg, parent_atoms in missed_updates:
64 +
65 + write("\n!!! The following update has been skipped " + \
66 + "due to unsatisfied dependencies:\n\n")
67 +
68 + write(str(pkg.slot_atom))
69 + write("\n")
70 +
71 + for parent, atom in parent_atoms:
72 + # TODO: Account for which $ROOT the atom applies to.
73 + self._show_unsatisfied_dep(parent.root, atom, myparent=parent)
74 + write("\n")
75 +
76 + sys.stderr.flush()
77 +
78 + def _show_missed_update_slot_conflicts(self, missed_updates):
79 +
80 + if not missed_updates:
81 + return
82 +
83 msg = []
84 msg.append("\n!!! One or more updates have been skipped due to " + \
85 "a dependency conflict:\n\n")
86
87 indent = " "
88 - for pkg, parent_atoms in missed_updates.itervalues():
89 + for pkg, parent_atoms in missed_updates:
90 msg.append(str(pkg.slot_atom))
91 msg.append("\n\n")
92
93 @@ -1932,6 +1973,11 @@
94 traversed_nodes.add(node)
95 msg.append('(dependency required by "%s" [%s])' % \
96 (colorize('INFORM', str(node.cpv)), node.type_name))
97 +
98 + if node not in self._dynamic_config.digraph:
99 + # The parent is not in the graph due to backtracking.
100 + break
101 +
102 # When traversing to parents, prefer arguments over packages
103 # since arguments are root nodes. Never traverse the same
104 # package twice, in order to prevent an infinite loop.