diff options
Diffstat (limited to 'bitbake/lib/bb/ui/ncurses.py')
-rw-r--r-- | bitbake/lib/bb/ui/ncurses.py | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/bitbake/lib/bb/ui/ncurses.py b/bitbake/lib/bb/ui/ncurses.py index 1db4ec173b..469f1b7309 100644 --- a/bitbake/lib/bb/ui/ncurses.py +++ b/bitbake/lib/bb/ui/ncurses.py | |||
@@ -44,8 +44,9 @@ | |||
44 | 44 | ||
45 | """ | 45 | """ |
46 | 46 | ||
47 | from __future__ import division | ||
48 | 47 | ||
48 | from __future__ import division | ||
49 | import logging | ||
49 | import os, sys, curses, itertools, time | 50 | import os, sys, curses, itertools, time |
50 | import bb | 51 | import bb |
51 | import xmlrpclib | 52 | import xmlrpclib |
@@ -246,29 +247,35 @@ class NCursesUI: | |||
246 | event = eventHandler.waitEvent(0.25) | 247 | event = eventHandler.waitEvent(0.25) |
247 | if not event: | 248 | if not event: |
248 | continue | 249 | continue |
250 | |||
249 | helper.eventHandler(event) | 251 | helper.eventHandler(event) |
250 | #mw.appendText("%s\n" % event[0]) | ||
251 | if isinstance(event, bb.build.TaskBase): | 252 | if isinstance(event, bb.build.TaskBase): |
252 | mw.appendText("NOTE: %s\n" % event._message) | 253 | mw.appendText("NOTE: %s\n" % event._message) |
253 | if isinstance(event, bb.msg.MsgDebug): | 254 | if isinstance(event, logging.LogRecord): |
254 | mw.appendText('DEBUG: ' + event._message + '\n') | 255 | mw.appendText(logging.getLevelName(event.levelno) + ': ' + event.getMessage() + '\n') |
255 | if isinstance(event, bb.msg.MsgNote): | 256 | |
256 | mw.appendText('NOTE: ' + event._message + '\n') | 257 | if isinstance(event, bb.event.CacheLoadStarted): |
257 | if isinstance(event, bb.msg.MsgWarn): | 258 | self.parse_total = event.total |
258 | mw.appendText('WARNING: ' + event._message + '\n') | 259 | if isinstance(event, bb.event.CacheLoadProgress): |
259 | if isinstance(event, bb.msg.MsgError): | 260 | x = event.current |
260 | mw.appendText('ERROR: ' + event._message + '\n') | 261 | y = self.parse_total |
261 | if isinstance(event, bb.msg.MsgFatal): | 262 | mw.setStatus("Loading Cache: %s [%2d %%]" % ( next(parsespin), x*100/y ) ) |
262 | mw.appendText('FATAL: ' + event._message + '\n') | 263 | if isinstance(event, bb.event.CacheLoadCompleted): |
264 | mw.setStatus("Idle") | ||
265 | mw.appendText("Loaded %d entries from dependency cache.\n" | ||
266 | % ( event.num_entries)) | ||
267 | |||
268 | if isinstance(event, bb.event.ParseStarted): | ||
269 | self.parse_total = event.total | ||
263 | if isinstance(event, bb.event.ParseProgress): | 270 | if isinstance(event, bb.event.ParseProgress): |
264 | x = event.sofar | 271 | x = event.current |
265 | y = event.total | 272 | y = self.parse_total |
266 | if x == y: | 273 | mw.setStatus("Parsing Recipes: %s [%2d %%]" % ( next(parsespin), x*100/y ) ) |
267 | mw.setStatus("Idle") | 274 | if isinstance(event, bb.event.ParseCompleted): |
268 | mw.appendText("Parsing finished. %d cached, %d parsed, %d skipped, %d masked." | 275 | mw.setStatus("Idle") |
276 | mw.appendText("Parsing finished. %d cached, %d parsed, %d skipped, %d masked.\n" | ||
269 | % ( event.cached, event.parsed, event.skipped, event.masked )) | 277 | % ( event.cached, event.parsed, event.skipped, event.masked )) |
270 | else: | 278 | |
271 | mw.setStatus("Parsing: %s (%04d/%04d) [%2d %%]" % ( next(parsespin), x, y, x*100//y ) ) | ||
272 | # if isinstance(event, bb.build.TaskFailed): | 279 | # if isinstance(event, bb.build.TaskFailed): |
273 | # if event.logfile: | 280 | # if event.logfile: |
274 | # if data.getVar("BBINCLUDELOGS", d): | 281 | # if data.getVar("BBINCLUDELOGS", d): |
@@ -289,7 +296,9 @@ class NCursesUI: | |||
289 | # bb.msg.error(bb.msg.domain.Build, "see log in %s" % logfile) | 296 | # bb.msg.error(bb.msg.domain.Build, "see log in %s" % logfile) |
290 | 297 | ||
291 | if isinstance(event, bb.command.CommandCompleted): | 298 | if isinstance(event, bb.command.CommandCompleted): |
292 | exitflag = True | 299 | # stop so the user can see the result of the build, but |
300 | # also allow them to now exit with a single ^C | ||
301 | shutdown = 2 | ||
293 | if isinstance(event, bb.command.CommandFailed): | 302 | if isinstance(event, bb.command.CommandFailed): |
294 | mw.appendText("Command execution failed: %s" % event.error) | 303 | mw.appendText("Command execution failed: %s" % event.error) |
295 | time.sleep(2) | 304 | time.sleep(2) |
@@ -306,13 +315,18 @@ class NCursesUI: | |||
306 | if activetasks: | 315 | if activetasks: |
307 | taw.appendText("Active Tasks:\n") | 316 | taw.appendText("Active Tasks:\n") |
308 | for task in activetasks.itervalues(): | 317 | for task in activetasks.itervalues(): |
309 | taw.appendText(task["title"]) | 318 | taw.appendText(task["title"] + '\n') |
310 | if failedtasks: | 319 | if failedtasks: |
311 | taw.appendText("Failed Tasks:\n") | 320 | taw.appendText("Failed Tasks:\n") |
312 | for task in failedtasks: | 321 | for task in failedtasks: |
313 | taw.appendText(task["title"]) | 322 | taw.appendText(task["title"] + '\n') |
314 | 323 | ||
315 | curses.doupdate() | 324 | curses.doupdate() |
325 | except EnvironmentError as ioerror: | ||
326 | # ignore interrupted io | ||
327 | if ioerror.args[0] == 4: | ||
328 | pass | ||
329 | |||
316 | except KeyboardInterrupt: | 330 | except KeyboardInterrupt: |
317 | if shutdown == 2: | 331 | if shutdown == 2: |
318 | mw.appendText("Third Keyboard Interrupt, exit.\n") | 332 | mw.appendText("Third Keyboard Interrupt, exit.\n") |