mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 12:29:55 +00:00
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 <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -90,6 +90,17 @@ class DataContext(dict):
|
|||||||
else:
|
else:
|
||||||
return value
|
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):
|
class DataSmart(MutableMapping):
|
||||||
def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ):
|
def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ):
|
||||||
self.dict = {}
|
self.dict = {}
|
||||||
@@ -117,9 +128,10 @@ class DataSmart(MutableMapping):
|
|||||||
s = __expand_python_regexp__.sub(varparse.python_sub, s)
|
s = __expand_python_regexp__.sub(varparse.python_sub, s)
|
||||||
if s == olds:
|
if s == olds:
|
||||||
break
|
break
|
||||||
except Exception:
|
except ExpansionError:
|
||||||
logger.exception("Error evaluating '%s'", s)
|
|
||||||
raise
|
raise
|
||||||
|
except Exception as exc:
|
||||||
|
raise ExpansionError(varname, s, exc)
|
||||||
|
|
||||||
varparse.value = s
|
varparse.value = s
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user