Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r11690 - in main/trunk/pym: _emerge portage/elog
Date: Tue, 14 Oct 2008 21:05:57
Message-Id: E1Kpr5X-0006xH-Ko@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-10-14 21:05:54 +0000 (Tue, 14 Oct 2008)
3 New Revision: 11690
4
5 Modified:
6 main/trunk/pym/_emerge/__init__.py
7 main/trunk/pym/portage/elog/__init__.py
8 Log:
9 When emerge --keep-going bails due to missing dependencies, show the error
10 message after the mod_echo output since otherwise the mod_echo output can
11 sweep the error message out of view. Thanks to Donnie Berkholz <dberkholz@g.o>
12 for reporting.
13
14
15 Modified: main/trunk/pym/_emerge/__init__.py
16 ===================================================================
17 --- main/trunk/pym/_emerge/__init__.py 2008-10-13 20:52:07 UTC (rev 11689)
18 +++ main/trunk/pym/_emerge/__init__.py 2008-10-14 21:05:54 UTC (rev 11690)
19 @@ -9103,6 +9103,7 @@
20 self._failed_pkgs = []
21 self._failed_pkgs_all = []
22 self._failed_pkgs_die_msgs = []
23 + self._post_mod_echo_msgs = []
24 self._parallel_fetch = False
25 merge_count = len([x for x in mergelist \
26 if isinstance(x, Package) and x.operation == "merge"])
27 @@ -9585,29 +9586,13 @@
28 if not mergelist:
29 break
30
31 - dropped_tasks = self._calc_resume_list()
32 - if dropped_tasks is None:
33 + if not self._calc_resume_list():
34 break
35
36 clear_caches(self.trees)
37 if not self._mergelist:
38 break
39
40 - if dropped_tasks:
41 -
42 - def _eerror(lines):
43 - for l in lines:
44 - eerror(l, phase="other", key=failed_pkg.pkg.cpv)
45 -
46 - msg = []
47 - msg.append("One or more packages have been " + \
48 - "dropped due to unsatisfied dependencies:")
49 - msg.append("")
50 - msg.extend(" " + str(task) for task in dropped_tasks)
51 - msg.append("")
52 - _eerror(msg)
53 - del _eerror, msg
54 - del dropped_tasks
55 self._save_resume_list()
56 self._pkg_count.curval = 0
57 self._pkg_count.maxval = len([x for x in self._mergelist \
58 @@ -9646,10 +9631,15 @@
59 log_file.close()
60 failure_log_shown = True
61
62 + # Dump mod_echo output now since it tends to flood the terminal.
63 + # This allows us to avoid having more important output, generated
64 + # later, from being swept away by the mod_echo output.
65 + mod_echo_output = _flush_elog_mod_echo()
66 +
67 if background and not failure_log_shown and \
68 self._failed_pkgs_all and \
69 self._failed_pkgs_die_msgs and \
70 - not _flush_elog_mod_echo():
71 + not mod_echo_output:
72
73 printer = portage.output.EOutput()
74 for mysettings, key, logentries in self._failed_pkgs_die_msgs:
75 @@ -9669,8 +9659,11 @@
76 for line in msgcontent:
77 printer.eerror(line.strip("\n"))
78
79 + if self._post_mod_echo_msgs:
80 + for msg in self._post_mod_echo_msgs:
81 + msg()
82 +
83 if len(self._failed_pkgs_all) > 1:
84 - _flush_elog_mod_echo()
85 msg = "The following packages have " + \
86 "failed to build or install:"
87 prefix = bad(" * ")
88 @@ -10118,9 +10111,8 @@
89 """
90 Use the current resume list to calculate a new one,
91 dropping any packages with unsatisfied deps.
92 - @rtype: set
93 - @returns: a possibly empty set of dropped tasks, or
94 - None if an error occurs.
95 + @rtype: bool
96 + @returns: True if successful, False otherwise.
97 """
98 print colorize("GOOD", "*** Resuming merge...")
99
100 @@ -10156,42 +10148,50 @@
101 print "\b\b... done!"
102
103 if e is not None:
104 - mydepgraph.display_problems()
105 - out = portage.output.EOutput()
106 - out.eerror("One or more packages are either masked or " + \
107 - "have missing dependencies:")
108 - out.eerror("")
109 - indent = " "
110 - for dep in e.value:
111 - if dep.atom is None:
112 - out.eerror(indent + "Masked package:")
113 - out.eerror(2 * indent + str(dep.parent))
114 - out.eerror("")
115 - else:
116 - out.eerror(indent + str(dep.atom) + " pulled in by:")
117 - out.eerror(2 * indent + str(dep.parent))
118 - out.eerror("")
119 - msg = "The resume list contains packages " + \
120 - "that are either masked or have " + \
121 - "unsatisfied dependencies. " + \
122 - "Please restart/continue " + \
123 - "the operation manually, or use --skipfirst " + \
124 - "to skip the first package in the list and " + \
125 - "any other packages that may be " + \
126 - "masked or have missing dependencies."
127 - for line in textwrap.wrap(msg, 72):
128 - out.eerror(line)
129 - return None
130 + def unsatisfied_resume_dep_msg():
131 + mydepgraph.display_problems()
132 + out = portage.output.EOutput()
133 + out.eerror("One or more packages are either masked or " + \
134 + "have missing dependencies:")
135 + out.eerror("")
136 + indent = " "
137 + show_parents = set()
138 + for dep in e.value:
139 + if dep.parent in show_parents:
140 + continue
141 + show_parents.add(dep.parent)
142 + if dep.atom is None:
143 + out.eerror(indent + "Masked package:")
144 + out.eerror(2 * indent + str(dep.parent))
145 + out.eerror("")
146 + else:
147 + out.eerror(indent + str(dep.atom) + " pulled in by:")
148 + out.eerror(2 * indent + str(dep.parent))
149 + out.eerror("")
150 + msg = "The resume list contains packages " + \
151 + "that are either masked or have " + \
152 + "unsatisfied dependencies. " + \
153 + "Please restart/continue " + \
154 + "the operation manually, or use --skipfirst " + \
155 + "to skip the first package in the list and " + \
156 + "any other packages that may be " + \
157 + "masked or have missing dependencies."
158 + for line in textwrap.wrap(msg, 72):
159 + out.eerror(line)
160 + self._post_mod_echo_msgs.append(unsatisfied_resume_dep_msg)
161 + return False
162
163 - if self._show_list():
164 + if success and self._show_list():
165 mylist = mydepgraph.altlist()
166 - if "--tree" in self.myopts:
167 - mylist.reverse()
168 - mydepgraph.display(mylist, favorites=self._favorites)
169 + if mylist:
170 + if "--tree" in self.myopts:
171 + mylist.reverse()
172 + mydepgraph.display(mylist, favorites=self._favorites)
173
174 + if not success:
175 + self._post_mod_echo_msgs.append(mydepgraph.display_problems)
176 + return False
177 mydepgraph.display_problems()
178 - if not success:
179 - return None
180
181 mylist = mydepgraph.altlist()
182 mydepgraph.break_refs(mylist)
183 @@ -10200,8 +10200,28 @@
184
185 self._mergelist = mylist
186 self._set_digraph(mydepgraph.digraph)
187 - return dropped_tasks
188
189 + msg_width = 75
190 + for task in dropped_tasks:
191 + if not (isinstance(task, Package) and task.operation == "merge"):
192 + continue
193 + pkg = task
194 + msg = "emerge --keep-going:" + \
195 + " %s" % (pkg.cpv,)
196 + if pkg.root != "/":
197 + msg += " for %s" % (pkg.root,)
198 + msg += " dropped due to unsatisfied dependency."
199 + for line in textwrap.wrap(msg, msg_width):
200 + eerror(line, phase="other", key=pkg.cpv)
201 + settings = mydepgraph.pkgsettings[pkg.root]
202 + # Ensure that log collection from $T is disabled inside
203 + # elog_process(), since any logs that might exist are
204 + # not valid here.
205 + settings.pop("T", None)
206 + portage.elog.elog_process(pkg.cpv, settings)
207 +
208 + return True
209 +
210 def _show_list(self):
211 myopts = self.myopts
212 if "--quiet" not in myopts and \
213
214 Modified: main/trunk/pym/portage/elog/__init__.py
215 ===================================================================
216 --- main/trunk/pym/portage/elog/__init__.py 2008-10-13 20:52:07 UTC (rev 11689)
217 +++ main/trunk/pym/portage/elog/__init__.py 2008-10-14 21:05:54 UTC (rev 11690)
218 @@ -72,7 +72,13 @@
219 except ImportError:
220 pass
221
222 - ebuild_logentries = collect_ebuild_messages(os.path.join(mysettings["T"], "logging"))
223 + if "T" in mysettings:
224 + ebuild_logentries = collect_ebuild_messages(
225 + os.path.join(mysettings["T"], "logging"))
226 + else:
227 + # A build dir isn't necessarily required since the messages.e*
228 + # functions allow messages to be generated in-memory.
229 + ebuild_logentries = {}
230 all_logentries = collect_messages()
231 if cpv in all_logentries:
232 all_logentries[cpv] = _merge_logentries(ebuild_logentries, all_logentries[cpv])