summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/cooker.py10
-rw-r--r--bitbake/lib/bb/event.py7
-rw-r--r--bitbake/lib/bb/msg.py10
3 files changed, 19 insertions, 8 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index a15b81f233..641a839810 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -1225,7 +1225,7 @@ class CookerParser(object):
1225 raise 1225 raise
1226 except ParsingFailure as exc: 1226 except ParsingFailure as exc:
1227 self.shutdown(clean=False) 1227 self.shutdown(clean=False)
1228 bb.fatal('Error parsing %s: %s' % 1228 bb.fatal('Unable to parse %s: %s' %
1229 (exc.recipe, bb.exceptions.to_string(exc.realexception))) 1229 (exc.recipe, bb.exceptions.to_string(exc.realexception)))
1230 except bb.parse.ParseError as exc: 1230 except bb.parse.ParseError as exc:
1231 bb.fatal(str(exc)) 1231 bb.fatal(str(exc))
@@ -1233,13 +1233,11 @@ class CookerParser(object):
1233 logger.error('Unable to parse %s', exc.recipe) 1233 logger.error('Unable to parse %s', exc.recipe)
1234 sys.exit(1) 1234 sys.exit(1)
1235 except Exception as exc: 1235 except Exception as exc:
1236 import traceback
1237 etype, value, tb = sys.exc_info() 1236 etype, value, tb = sys.exc_info()
1238 formatted = bb.exceptions.format_extracted(value.traceback, limit=5) 1237 logger.error('Unable to parse %s', value.recipe,
1239 formatted.extend(traceback.format_exception_only(etype, value)) 1238 exc_info=(etype, value, exc.traceback))
1240
1241 self.shutdown(clean=False) 1239 self.shutdown(clean=False)
1242 bb.fatal('Error parsing %s:\n%s' % (value.recipe, ''.join(formatted))) 1240 sys.exit(1)
1243 1241
1244 self.current += 1 1242 self.current += 1
1245 self.virtuals += len(result) 1243 self.virtuals += len(result)
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index 4ff530fcb4..a3288b619b 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -30,6 +30,7 @@ except ImportError:
30 import pickle 30 import pickle
31import logging 31import logging
32import atexit 32import atexit
33import traceback
33import bb.utils 34import bb.utils
34 35
35# This is the pid for which we should generate the event. This is set when 36# This is the pid for which we should generate the event. This is set when
@@ -423,6 +424,12 @@ class LogHandler(logging.Handler):
423 """Dispatch logging messages as bitbake events""" 424 """Dispatch logging messages as bitbake events"""
424 425
425 def emit(self, record): 426 def emit(self, record):
427 if record.exc_info:
428 etype, value, tb = record.exc_info
429 if hasattr(tb, 'tb_next'):
430 tb = list(bb.exceptions.extract_traceback(tb, context=3))
431 record.bb_exc_info = (etype, value, tb)
432 record.exc_info = None
426 fire(record, None) 433 fire(record, None)
427 434
428 def filter(self, record): 435 def filter(self, record):
diff --git a/bitbake/lib/bb/msg.py b/bitbake/lib/bb/msg.py
index a7ac850790..12d19ff8e1 100644
--- a/bitbake/lib/bb/msg.py
+++ b/bitbake/lib/bb/msg.py
@@ -65,9 +65,15 @@ class BBLogFormatter(logging.Formatter):
65 def format(self, record): 65 def format(self, record):
66 record.levelname = self.getLevelName(record.levelno) 66 record.levelname = self.getLevelName(record.levelno)
67 if record.levelno == self.PLAIN: 67 if record.levelno == self.PLAIN:
68 return record.getMessage() 68 msg = record.getMessage()
69 else: 69 else:
70 return logging.Formatter.format(self, record) 70 msg = logging.Formatter.format(self, record)
71
72 if hasattr(record, 'bb_exc_info'):
73 etype, value, tb = record.bb_exc_info
74 formatted = bb.exceptions.format_exception(etype, value, tb, limit=5)
75 msg += '\n' + ''.join(formatted)
76 return msg
71 77
72class Loggers(dict): 78class Loggers(dict):
73 def __getitem__(self, key): 79 def __getitem__(self, key):