]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
cooker: pass traceback back from parsing thread
authorChris Larson <chris_larson@mentor.com>
Thu, 5 May 2011 23:55:33 +0000 (16:55 -0700)
committerChris Larson <chris_larson@mentor.com>
Mon, 16 May 2011 19:39:42 +0000 (12:39 -0700)
Uses bb.exceptions to get a traceback back from the parsing thread to the main
thread, where it is then formatted.  Also enables 3 lines of context for the
formatted traceback, and limits the number of entries displayed to 5.

Signed-off-by: Chris Larson <chris_larson@mentor.com>
lib/bb/cooker.py

index 95b5db91f358efec4f2ce84439e5c59d957db34a..37daf3bb4f033ba469f9bd4536b52122a8326365 100644 (file)
@@ -1026,7 +1026,9 @@ def parse_file(task):
     try:
         return True, bb.cache.Cache.parse(filename, appends, parse_file.cfg)
     except Exception, exc:
+        tb = sys.exc_info()[2]
         exc.recipe = filename
+        exc.traceback = list(bb.exceptions.extract_traceback(tb, context=3))
         raise exc
     # Need to turn BaseExceptions into Exceptions here so we gracefully shutdown
     # and for example a worker thread doesn't just exit on its own in response to
@@ -1119,9 +1121,14 @@ class CookerParser(object):
             self.shutdown(clean=False)
             bb.fatal('Error parsing %s: %s' %
                      (exc.recipe, bb.exceptions.to_string(exc.realexception)))
-        except Exception as exc:
+        except Exception:
+            import traceback
+            etype, value, tb = sys.exc_info()
+            formatted = bb.exceptions.format_extracted(value.traceback, limit=5)
+            formatted.extend(traceback.format_exception_only(etype, value))
+
             self.shutdown(clean=False)
-            bb.fatal('Error parsing %s: %s' % (exc.recipe, exc))
+            bb.fatal('Error parsing %s:\n%s' % (value.recipe, ''.join(formatted)))
 
         self.current += 1
         self.virtuals += len(result)