summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-08-23 16:54:18 +1200
committerPaul Eggleton <paul.eggleton@linux.intel.com>2017-08-31 11:27:57 +1200
commit89ff7937d36f48168f476ae39e60bfb6c86ee4c9 (patch)
treedb99f1a3738c02396ecd2ac2a7683463bce66aab
parentc5de0f9cee5876e78c34057ad2376f049f53c621 (diff)
downloadbitbake-contrib-89ff7937d36f48168f476ae39e60bfb6c86ee4c9.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>
-rw-r--r--lib/bb/tinfoil.py7
-rw-r--r--lib/bb/ui/knotty.py50
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 f3900bdd0..2edd0aa61 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"])
@@ -487,29 +513,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