1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-08 17:19:20 +00:00

Shift exception formatting into the UI

Now we use bb.exceptions to pass pickleable traceback entries to the UI, and
the UI is free to do whatever it wants to do with this information. By
default, the log formatter for the UIs formats it with bb.exceptions.  This
also means that all exceptions should now show 3 lines of context and limit to
5 entries.

(Bitbake rev: ee48d628ee038bd72e1cd94aa75f5ccbacbcee4c)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Chris Larson
2011-05-05 17:43:38 -07:00
committed by Richard Purdie
parent a3efbb96f2
commit 96e2ee1d73
3 changed files with 19 additions and 8 deletions
+4 -6
View File
@@ -1225,7 +1225,7 @@ class CookerParser(object):
raise raise
except ParsingFailure as exc: except ParsingFailure as exc:
self.shutdown(clean=False) self.shutdown(clean=False)
bb.fatal('Error parsing %s: %s' % bb.fatal('Unable to parse %s: %s' %
(exc.recipe, bb.exceptions.to_string(exc.realexception))) (exc.recipe, bb.exceptions.to_string(exc.realexception)))
except bb.parse.ParseError as exc: except bb.parse.ParseError as exc:
bb.fatal(str(exc)) bb.fatal(str(exc))
@@ -1233,13 +1233,11 @@ class CookerParser(object):
logger.error('Unable to parse %s', exc.recipe) logger.error('Unable to parse %s', exc.recipe)
sys.exit(1) sys.exit(1)
except Exception as exc: except Exception as exc:
import traceback
etype, value, tb = sys.exc_info() etype, value, tb = sys.exc_info()
formatted = bb.exceptions.format_extracted(value.traceback, limit=5) logger.error('Unable to parse %s', value.recipe,
formatted.extend(traceback.format_exception_only(etype, value)) exc_info=(etype, value, exc.traceback))
self.shutdown(clean=False) self.shutdown(clean=False)
bb.fatal('Error parsing %s:\n%s' % (value.recipe, ''.join(formatted))) sys.exit(1)
self.current += 1 self.current += 1
self.virtuals += len(result) self.virtuals += len(result)
+7
View File
@@ -30,6 +30,7 @@ except ImportError:
import pickle import pickle
import logging import logging
import atexit import atexit
import traceback
import bb.utils import bb.utils
# This is the pid for which we should generate the event. This is set when # This is the pid for which we should generate the event. This is set when
@@ -423,6 +424,12 @@ class LogHandler(logging.Handler):
"""Dispatch logging messages as bitbake events""" """Dispatch logging messages as bitbake events"""
def emit(self, record): def emit(self, record):
if record.exc_info:
etype, value, tb = record.exc_info
if hasattr(tb, 'tb_next'):
tb = list(bb.exceptions.extract_traceback(tb, context=3))
record.bb_exc_info = (etype, value, tb)
record.exc_info = None
fire(record, None) fire(record, None)
def filter(self, record): def filter(self, record):
+8 -2
View File
@@ -65,9 +65,15 @@ class BBLogFormatter(logging.Formatter):
def format(self, record): def format(self, record):
record.levelname = self.getLevelName(record.levelno) record.levelname = self.getLevelName(record.levelno)
if record.levelno == self.PLAIN: if record.levelno == self.PLAIN:
return record.getMessage() msg = record.getMessage()
else: else:
return logging.Formatter.format(self, record) msg = logging.Formatter.format(self, record)
if hasattr(record, 'bb_exc_info'):
etype, value, tb = record.bb_exc_info
formatted = bb.exceptions.format_exception(etype, value, tb, limit=5)
msg += '\n' + ''.join(formatted)
return msg
class Loggers(dict): class Loggers(dict):
def __getitem__(self, key): def __getitem__(self, key):