diff options
-rw-r--r-- | bitbake/lib/bb/cooker.py | 10 | ||||
-rw-r--r-- | bitbake/lib/bb/event.py | 7 | ||||
-rw-r--r-- | bitbake/lib/bb/msg.py | 10 |
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 |
31 | import logging | 31 | import logging |
32 | import atexit | 32 | import atexit |
33 | import traceback | ||
33 | import bb.utils | 34 | import 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 | ||
72 | class Loggers(dict): | 78 | class Loggers(dict): |
73 | def __getitem__(self, key): | 79 | def __getitem__(self, key): |