From 71f8b122dc8477b12911ff7b145a42c4c97a118f Mon Sep 17 00:00:00 2001 From: Chris Larson Date: Fri, 17 Dec 2010 11:01:51 -0700 Subject: build: fix file mode for /dev/null Signed-off-by: Chris Larson --- lib/bb/build.py | 2 +- lib/bb/utils.py | 43 ++++++++++++------------------------------- 2 files changed, 13 insertions(+), 32 deletions(-) (limited to 'lib/bb') diff --git a/lib/bb/build.py b/lib/bb/build.py index 5e494deff..5f3986b1e 100644 --- a/lib/bb/build.py +++ b/lib/bb/build.py @@ -37,7 +37,7 @@ from bb import data, event, utils bblogger = logging.getLogger('BitBake') logger = logging.getLogger('BitBake.Build') -NULL = open('/dev/null', 'a') +NULL = open('/dev/null', 'r+') class FuncFailed(Exception): diff --git a/lib/bb/utils.py b/lib/bb/utils.py index 986f94f3f..f5e4b60ab 100644 --- a/lib/bb/utils.py +++ b/lib/bb/utils.py @@ -297,12 +297,10 @@ def _print_trace(body, line): """ # print the environment of the method min_line = max(1, line-4) - max_line = min(line + 4, len(body)) + max_line = min(line + 4, len(body)-1) for i in xrange(min_line, max_line + 1): - if line == i: - logger.error(' *** %.4d:%s', i, body[i-1]) - else: - logger.error(' %.4d:%s', i, body[i-1]) + logger.error("\t%.4d:%s", i, body[i-1]) + def better_compile(text, file, realfile, mode = "exec"): """ @@ -344,38 +342,21 @@ def better_exec(code, context, text, realfile = ""): if t in [bb.parse.SkipPackage, bb.build.FuncFailed]: raise - logger.error('There was an error when executing a python function in: %s', realfile) + logger.exception("Error executing python function in '%s'", code.co_filename) # Strip 'us' from the stack (better_exec call) tb = tb.tb_next import traceback - textarray = text.split('\n') - linefailed = traceback.tb_lineno(tb) - tbextract = traceback.extract_tb(tb) - tbformat = "\n".join(traceback.format_list(tbextract)) - logger.error("The stack trace of python calls that resulted in thie exception/failure was:") - for line in tbformat.split('\n'): - logger.error(line) - - logger.error("The code that was being executed was:") - _print_trace(textarray, linefailed) - logger.error("(file: '%s', lineno: %s, function: %s)", tbextract[0][0], tbextract[0][1], tbextract[0][2]) - - # See if this is a function we constructed and has calls back into other functions in - # "text". If so, try and improve the context of the error by diving down the trace - level = 0 - nexttb = tb.tb_next - while nexttb is not None: - if tbextract[level][0] == tbextract[level+1][0] and tbextract[level+1][2] == tbextract[level][0]: - _print_trace(textarray, tbextract[level+1][1]) - logger.error("(file: '%s', lineno: %s, function: %s)", tbextract[level+1][0], tbextract[level+1][1], tbextract[level+1][2]) - else: - break - nexttb = tb.tb_next - level = level + 1 - + tbextract = "\n".join(traceback.format_list(tbextract)) + bb.msg.error(bb.msg.domain.Util, "Traceback:") + for line in tbextract.split('\n'): + bb.msg.error(bb.msg.domain.Util, line) + + line = traceback.tb_lineno(tb) + bb.msg.error(bb.msg.domain.Util, "The lines leading to this error were:") + _print_trace( text.split('\n'), line ) raise def simple_exec(code, context): -- cgit 1.2.3-korg