From 101b599110f7bc29f52a14a968f30323aeb797ca Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 23 Feb 2011 13:13:31 +0000 Subject: bitbake/data_smart: Improve Variable expansion error handling If expanding a variable triggers an exception the caller currently has no way to supress the error message or otherwise handle the siutation. An example of where this is a problem is "bitbake -e" showing tracebacks and errors for variables like SRCPV in OE/Poky. Secondly in a chained expansion fails, log mesages are recorded for every step of the expansion, not just the innermost error which is where the real failure occured. To fix this we introduce a new exception ExpansionError which callers can handle as appropriate. Signed-off-by: Richard Purdie --- bitbake/lib/bb/data_smart.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'bitbake/lib/bb') diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index e76fbbf6ce..df9798ad58 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py @@ -90,6 +90,17 @@ class DataContext(dict): else: return value +class ExpansionError(Exception): + def __init__(self, varname, expression, exception): + self.expression = expression + self.variablename = varname + self.exception = exception + self.msg = "Failure expanding variable %s, expression was %s which triggered exception %s: %s" % (varname, expression, type(exception).__name__, exception) + Exception.__init__(self, self.msg) + self.args = (varname, expression, exception) + def __str__(self): + return self.msg + class DataSmart(MutableMapping): def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ): self.dict = {} @@ -117,9 +128,10 @@ class DataSmart(MutableMapping): s = __expand_python_regexp__.sub(varparse.python_sub, s) if s == olds: break - except Exception: - logger.exception("Error evaluating '%s'", s) + except ExpansionError: raise + except Exception as exc: + raise ExpansionError(varname, s, exc) varparse.value = s -- cgit v1.2.3-54-g00ecf