Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10133 - main/branches/2.1.2/bin
Date: Sat, 03 May 2008 08:25:44
Message-Id: E1JsD3t-0003s2-G7@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-05-03 08:25:40 +0000 (Sat, 03 May 2008)
3 New Revision: 10133
4
5 Modified:
6 main/branches/2.1.2/bin/emerge
7 Log:
8 * Move circular deps and blocker displays to depgraph.display_problems().
9 * Always call display_problems() since calling it from inside display()
10 can lead to unwanted recursion.
11 (trunk r10132)
12
13
14 Modified: main/branches/2.1.2/bin/emerge
15 ===================================================================
16 --- main/branches/2.1.2/bin/emerge 2008-05-03 08:21:02 UTC (rev 10132)
17 +++ main/branches/2.1.2/bin/emerge 2008-05-03 08:25:40 UTC (rev 10133)
18 @@ -1898,6 +1898,8 @@
19 self._missing_args = []
20 self._masked_installed = []
21 self._unsatisfied_deps_for_display = []
22 + self._unsatisfied_blockers_for_display = None
23 + self._circular_deps_for_display = None
24 self._dep_stack = []
25 self._unsatisfied_deps = []
26 self._ignored_deps = []
27 @@ -1916,6 +1918,8 @@
28 if not self._slot_collision_info:
29 return
30
31 + self._show_merge_list()
32 +
33 msg = []
34 msg.append("\n!!! Multiple versions within a single " + \
35 "package slot have been pulled\n")
36 @@ -3868,43 +3872,7 @@
37 continue
38
39 if not selected_nodes:
40 - # No leaf nodes are available, so we have a circular
41 - # dependency panic situation. Reduce the noise level to a
42 - # minimum via repeated elimination of root nodes since they
43 - # have no parents and thus can not be part of a cycle.
44 - while True:
45 - root_nodes = mygraph.root_nodes(
46 - ignore_priority=DepPriority.MEDIUM_SOFT)
47 - if not root_nodes:
48 - break
49 - for node in root_nodes:
50 - mygraph.remove(node)
51 - # Display the USE flags that are enabled on nodes that are part
52 - # of dependency cycles in case that helps the user decide to
53 - # disable some of them.
54 - display_order = []
55 - tempgraph = mygraph.copy()
56 - while not tempgraph.empty():
57 - nodes = tempgraph.leaf_nodes()
58 - if not nodes:
59 - node = tempgraph.order[0]
60 - else:
61 - node = nodes[0]
62 - display_order.append(node)
63 - tempgraph.remove(node)
64 - display_order.reverse()
65 - self.myopts.pop("--quiet", None)
66 - self.myopts.pop("--verbose", None)
67 - self.myopts["--tree"] = True
68 - print
69 - print
70 - self.display(display_order)
71 - print "!!! Error: circular dependencies:"
72 - print
73 - mygraph.debug_print()
74 - print
75 - print "!!! Note that circular dependencies can often be avoided by temporarily"
76 - print "!!! disabling USE flags that trigger optional dependencies."
77 + self._circular_deps_for_display = mygraph
78 raise self._unknown_internal_error()
79
80 # At this point, we've succeeded in selecting one or more nodes, so
81 @@ -3984,26 +3952,79 @@
82
83 if unsolvable_blockers and \
84 not self._accept_blocker_conflicts():
85 - quiet = "--quiet" in self.myopts
86 - display_list = retlist[:]
87 - if tree_mode:
88 - display_list.reverse()
89 - portage.writemsg("\n", noiselevel=-1)
90 - self.display(display_list)
91 - msg = "Error: The above package list contains " + \
92 - "packages which cannot be installed " + \
93 - "at the same time on the same system."
94 - prefix = bad(" * ")
95 - from textwrap import wrap
96 - portage.writemsg("\n", noiselevel=-1)
97 - for line in wrap(msg, 70):
98 - portage.writemsg(prefix + line + "\n", noiselevel=-1)
99 - if not quiet:
100 - show_blocker_docs_link()
101 + self._unsatisfied_blockers_for_display = unsolvable_blockers
102 + self._serialized_tasks_cache = retlist[:]
103 raise self._unknown_internal_error()
104
105 + if self._slot_collision_info and \
106 + not self._accept_blocker_conflicts():
107 + self._serialized_tasks_cache = retlist[:]
108 + raise self._unknown_internal_error()
109 +
110 return retlist
111
112 + def _show_circular_deps(self, mygraph):
113 + # No leaf nodes are available, so we have a circular
114 + # dependency panic situation. Reduce the noise level to a
115 + # minimum via repeated elimination of root nodes since they
116 + # have no parents and thus can not be part of a cycle.
117 + while True:
118 + root_nodes = mygraph.root_nodes(
119 + ignore_priority=DepPriority.MEDIUM_SOFT)
120 + if not root_nodes:
121 + break
122 + mygraph.difference_update(root_nodes)
123 + # Display the USE flags that are enabled on nodes that are part
124 + # of dependency cycles in case that helps the user decide to
125 + # disable some of them.
126 + display_order = []
127 + tempgraph = mygraph.copy()
128 + while not tempgraph.empty():
129 + nodes = tempgraph.leaf_nodes()
130 + if not nodes:
131 + node = tempgraph.order[0]
132 + else:
133 + node = nodes[0]
134 + display_order.append(node)
135 + tempgraph.remove(node)
136 + display_order.reverse()
137 + self.myopts.pop("--quiet", None)
138 + self.myopts.pop("--verbose", None)
139 + self.myopts["--tree"] = True
140 + portage.writemsg("\n\n", noiselevel=-1)
141 + self.display(display_order)
142 + prefix = colorize("BAD", " * ")
143 + portage.writemsg("\n", noiselevel=-1)
144 + portage.writemsg(prefix + "Error: circular dependencies:\n",
145 + noiselevel=-1)
146 + portage.writemsg("\n", noiselevel=-1)
147 + mygraph.debug_print()
148 + portage.writemsg("\n", noiselevel=-1)
149 + portage.writemsg(prefix + "Note that circular dependencies " + \
150 + "can often be avoided by temporarily\n", noiselevel=-1)
151 + portage.writemsg(prefix + "disabling USE flags that trigger " + \
152 + "optional dependencies.\n", noiselevel=-1)
153 +
154 + def _show_merge_list(self):
155 + if self._serialized_tasks_cache is not None:
156 + display_list = self._serialized_tasks_cache[:]
157 + if "--tree" in self.myopts:
158 + display_list.reverse()
159 + self.display(display_list)
160 +
161 + def _show_unsatisied_blockers(self, blockers):
162 + self._show_merge_list()
163 + msg = "Error: The above package list contains " + \
164 + "packages which cannot be installed " + \
165 + "at the same time on the same system."
166 + prefix = colorize("BAD", " * ")
167 + from textwrap import wrap
168 + portage.writemsg("\n", noiselevel=-1)
169 + for line in wrap(msg, 70):
170 + portage.writemsg(prefix + line + "\n", noiselevel=-1)
171 + if "--quiet" not in self.myopts:
172 + show_blocker_docs_link()
173 +
174 def display(self, mylist, favorites=[], verbosity=None):
175 if verbosity is None:
176 verbosity = ("--quiet" in self.myopts and 1 or \
177 @@ -4682,7 +4703,6 @@
178 sys.stdout.write(text)
179
180 sys.stdout.flush()
181 - self.display_problems()
182 return os.EX_OK
183
184 def display_problems(self):
185 @@ -4694,17 +4714,16 @@
186 to ensure that the user is notified of problems with the graph.
187 """
188
189 - task_list = self._serialized_tasks_cache
190 + if self._circular_deps_for_display is not None:
191 + self._show_circular_deps(
192 + self._circular_deps_for_display)
193
194 - # Any blockers must be appended to the tail of the list,
195 - # so we only need to check the last item.
196 - have_blocker_conflict = bool(task_list and \
197 - (isinstance(task_list[-1], Blocker) and \
198 - not task_list[-1].satisfied))
199 -
200 # The user is only notified of a slot conflict if
201 # there are no unresolvable blocker conflicts.
202 - if not have_blocker_conflict:
203 + if self._unsatisfied_blockers_for_display is not None:
204 + self._show_unsatisied_blockers(
205 + self._unsatisfied_blockers_for_display)
206 + else:
207 self._show_slot_collision_notice()
208
209 # TODO: Add generic support for "set problem" handlers so that
210 @@ -7745,11 +7764,11 @@
211 except portage_exception.PackageNotFound, e:
212 portage.writemsg("\n!!! %s\n" % str(e), noiselevel=-1)
213 return 1
214 + if show_spinner:
215 + print "\b\b... done!"
216 if not retval:
217 mydepgraph.display_problems()
218 return 1
219 - if "--quiet" not in myopts and "--nodeps" not in myopts:
220 - print "\b\b... done!"
221 display = pretend or \
222 ((ask or tree or verbose) and not (quiet and not ask))
223 if not display:
224 @@ -7768,6 +7787,7 @@
225 retval = mydepgraph.display(
226 mydepgraph.altlist(reversed=tree),
227 favorites=favorites)
228 + mydepgraph.display_problems()
229 if retval != os.EX_OK:
230 return retval
231 prompt="Would you like to resume merging these packages?"
232 @@ -7775,6 +7795,7 @@
233 retval = mydepgraph.display(
234 mydepgraph.altlist(reversed=("--tree" in myopts)),
235 favorites=favorites)
236 + mydepgraph.display_problems()
237 if retval != os.EX_OK:
238 return retval
239 mergecount=0
240 @@ -7818,12 +7839,14 @@
241 retval = mydepgraph.display(
242 mydepgraph.altlist(reversed=tree),
243 favorites=favorites)
244 + mydepgraph.display_problems()
245 if retval != os.EX_OK:
246 return retval
247 else:
248 retval = mydepgraph.display(
249 mydepgraph.altlist(reversed=("--tree" in myopts)),
250 favorites=favorites)
251 + mydepgraph.display_problems()
252 if retval != os.EX_OK:
253 return retval
254 if "--buildpkgonly" in myopts:
255
256 --
257 gentoo-commits@l.g.o mailing list