bitbake/lib/bb/utils.py:
authorHolger Hans Peter Freyther <zecke@selfish.org>
Tue, 7 Mar 2006 20:21:51 +0000 (20:21 +0000)
committerHolger Hans Peter Freyther <zecke@selfish.org>
Tue, 7 Mar 2006 20:21:51 +0000 (20:21 +0000)
    Create a work in progress version for
    better_execute. With advanced error reporting
    facilities.

bitbake/lib/bb/build.py:
    Use better_execute

bitbake/parse/parse_py/BBHandler.py:
    Use better_execute instead of exex

lib/bb/build.py
lib/bb/parse/parse_py/BBHandler.py
lib/bb/utils.py

index 5a72be7..b59473b 100644 (file)
@@ -130,7 +130,7 @@ def exec_func_python(func, d):
     g['bb'] = bb
     g['os'] = os
     g['d'] = d
-    exec comp in g
+    utils.better_exec(comp,g,tmp, bb.data.getVar('FILE',d,1))
     if os.path.exists(prevdir):
         os.chdir(prevdir)
 
index d083bb3..422ce6f 100644 (file)
@@ -207,7 +207,7 @@ def feeder(lineno, s, fn, d):
         else:
             text = '\n'.join(__body__)
             comp = bb.utils.better_compile(text, "<bb>", fn )
-            exec comp in __builtins__
+            bb.utils.better_exec(comp, __builtins__, text, fn)
             __body__ = []
             __inpython__ = False
             funcs = data.getVar('__functions__', d) or ""
index 31dc4e3..53c874f 100644 (file)
@@ -96,6 +96,10 @@ def explode_deps(s):
 
 
 def better_compile(text, file, realfile):
+    """
+    A better compile method. This method
+    will print  the offending lines.
+    """
     try:
         return compile(text, file, "exec")
     except Exception, e:
@@ -116,3 +120,31 @@ def better_compile(text, file, realfile):
         # exit now
         sys.exit(1)
 
+def better_exec(code, context, text, realfile):
+    """
+    Similiar to better_compile, better_exec will
+    print the lines that are responsible for the
+    error.
+    """
+    import bb,sys
+    try:
+        bb.note("executing")
+        exec code in context
+    except:
+        (t,value,tb) = sys.exc_info()
+        bb.note("error")
+
+        import traceback
+        print type(t)
+        print type(value)
+        print type(tb)
+        print t
+        print value
+        print tb
+        print dir(tb)
+        while tb.tb_next:
+            tb = tb.tb_next
+
+        print "f:%d" %traceback.tb_lineno(tb)
+        traceback.print_tb(tb)
+        raise