summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
authorChris Larson <chris_larson@mentor.com>2011-05-05 17:43:38 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-06-08 20:38:25 +0100
commit96e2ee1d730fa19665cca34c2cc3deb3fa5dfd2d (patch)
tree9c75b5c023be0bb02681d09cf42b1d4f358364c4 /bitbake/lib
parenta3efbb96f23a222c58f2f4114a75d2f98d7da11f (diff)
downloadast2050-yocto-poky-96e2ee1d730fa19665cca34c2cc3deb3fa5dfd2d.zip
ast2050-yocto-poky-96e2ee1d730fa19665cca34c2cc3deb3fa5dfd2d.tar.gz
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>
Diffstat (limited to 'bitbake/lib')
-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 a15b81f..641a839 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -1225,7 +1225,7 @@ class CookerParser(object):
raise
except ParsingFailure as exc:
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)))
except bb.parse.ParseError as exc:
bb.fatal(str(exc))
@@ -1233,13 +1233,11 @@ class CookerParser(object):
logger.error('Unable to parse %s', exc.recipe)
sys.exit(1)
except Exception as exc:
- import traceback
etype, value, tb = sys.exc_info()
- formatted = bb.exceptions.format_extracted(value.traceback, limit=5)
- formatted.extend(traceback.format_exception_only(etype, value))
-
+ logger.error('Unable to parse %s', value.recipe,
+ exc_info=(etype, value, exc.traceback))
self.shutdown(clean=False)
- bb.fatal('Error parsing %s:\n%s' % (value.recipe, ''.join(formatted)))
+ sys.exit(1)
self.current += 1
self.virtuals += len(result)
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index 4ff530f..a3288b6 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -30,6 +30,7 @@ except ImportError:
import pickle
import logging
import atexit
+import traceback
import bb.utils
# 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"""
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)
def filter(self, record):
diff --git a/bitbake/lib/bb/msg.py b/bitbake/lib/bb/msg.py
index a7ac850..12d19ff 100644
--- a/bitbake/lib/bb/msg.py
+++ b/bitbake/lib/bb/msg.py
@@ -65,9 +65,15 @@ class BBLogFormatter(logging.Formatter):
def format(self, record):
record.levelname = self.getLevelName(record.levelno)
if record.levelno == self.PLAIN:
- return record.getMessage()
+ msg = record.getMessage()
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):
def __getitem__(self, key):
OpenPOWER on IntegriCloud