]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake/data_smart: Improve Variable expansion error handling
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 23 Feb 2011 13:13:31 +0000 (13:13 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 23 Feb 2011 13:13:31 +0000 (13:13 +0000)
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>
bitbake/lib/bb/data_smart.py

index e76fbbf6ce666ba24e3fd99cd8990ec729b8a794..df9798ad58acb8adaba5bc85ef594370ec5d9b39 100644 (file)
@@ -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