diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2017-08-31 11:30:44 +1200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-08-31 17:42:08 +0100 |
commit | 24879df071d4803db3d39ae1d5cad852daa92f28 (patch) | |
tree | fc5c48e60cdd8ef008cfc2272bb68a9643bb54d0 | |
parent | b5e3b28b7c982dd8a3991d727f25710dbf58bb80 (diff) | |
download | bitbake-contrib-24879df071d4803db3d39ae1d5cad852daa92f28.tar.gz |
tinfoil: ensure log lines get printed when tasks fail
If a task fails during build_targets(), we need to print out the log
lines as knotty does or the user will be missing information about the
failure.
(This should get some deeper refactoring, but now isn't the time for
that.)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | lib/bb/tinfoil.py | 7 | ||||
-rw-r--r-- | lib/bb/ui/knotty.py | 50 |
2 files changed, 34 insertions, 23 deletions
diff --git a/lib/bb/tinfoil.py b/lib/bb/tinfoil.py index fd17edcc5..b50ed0553 100644 --- a/lib/bb/tinfoil.py +++ b/lib/bb/tinfoil.py @@ -714,6 +714,9 @@ class Tinfoil: eventmask.extend(extra_events) ret = self.set_event_mask(eventmask) + includelogs = self.config_data.getVar('BBINCLUDELOGS') + loglines = self.config_data.getVar('BBINCLUDELOGS_LINES') + ret = self.run_command('buildTargets', targets, task) if handle_events: result = False @@ -743,6 +746,10 @@ class Tinfoil: if event_callback and event_callback(event): continue if helper.eventHandler(event): + if isinstance(event, bb.build.TaskFailedSilent): + logger.warning("Logfile for failed setscene task is %s" % event.logfile) + elif isinstance(event, bb.build.TaskFailed): + bb.ui.knotty.print_event_log(event, includelogs, loglines, termfilter) continue if isinstance(event, bb.event.ProcessStarted): if self.quiet > 1: diff --git a/lib/bb/ui/knotty.py b/lib/bb/ui/knotty.py index 6b0781d8f..fa88e6ccd 100644 --- a/lib/bb/ui/knotty.py +++ b/lib/bb/ui/knotty.py @@ -312,6 +312,32 @@ class TerminalFilter(object): fd = sys.stdin.fileno() self.termios.tcsetattr(fd, self.termios.TCSADRAIN, self.stdinbackup) +def print_event_log(event, includelogs, loglines, termfilter): + # FIXME refactor this out further + logfile = event.logfile + if logfile and os.path.exists(logfile): + termfilter.clearFooter() + bb.error("Logfile of failure stored in: %s" % logfile) + if includelogs and not event.errprinted: + print("Log data follows:") + f = open(logfile, "r") + lines = [] + while True: + l = f.readline() + if l == '': + break + l = l.rstrip() + if loglines: + lines.append(' | %s' % l) + if len(lines) > int(loglines): + lines.pop(0) + else: + print('| %s' % l) + f.close() + if lines: + for line in lines: + print(line) + def _log_settings_from_server(server, observe_only): # Get values of variables which control our output includelogs, error = server.runCommand(["getVariable", "BBINCLUDELOGS"]) @@ -489,29 +515,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): continue if isinstance(event, bb.build.TaskFailed): return_value = 1 - logfile = event.logfile - if logfile and os.path.exists(logfile): - termfilter.clearFooter() - bb.error("Logfile of failure stored in: %s" % logfile) - if includelogs and not event.errprinted: - print("Log data follows:") - f = open(logfile, "r") - lines = [] - while True: - l = f.readline() - if l == '': - break - l = l.rstrip() - if loglines: - lines.append(' | %s' % l) - if len(lines) > int(loglines): - lines.pop(0) - else: - print('| %s' % l) - f.close() - if lines: - for line in lines: - print(line) + print_event_log(event, includelogs, loglines, termfilter) if isinstance(event, bb.build.TaskBase): logger.info(event._message) continue |