From 7c4fdb8c178a2a48ee8c3a203dcac51b32c5ad1d Mon Sep 17 00:00:00 2001 From: Christopher Larson Date: Mon, 24 Aug 2015 15:32:00 -0700 Subject: bitbake: bb.cookerdata: include useful traceback for ExpansionError/ParseError Show the user only the portion of the traceback which was from the metadata, nothing from bitbake's internal calls. (Bitbake rev: c45054aef03393fa0bf70e853ddcfc55988493cf) Signed-off-by: Christopher Larson Signed-off-by: Richard Purdie --- bitbake/lib/bb/cookerdata.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'bitbake/lib/bb/cookerdata.py') diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py index b20040c0b3..f19c283884 100644 --- a/bitbake/lib/bb/cookerdata.py +++ b/bitbake/lib/bb/cookerdata.py @@ -180,7 +180,16 @@ def catch_parse_error(func): parselog.critical("Unable to parse %s: %s" % (fn, exc)) sys.exit(1) except (bb.parse.ParseError, bb.data_smart.ExpansionError) as exc: - parselog.critical("Unable to parse %s: %s" % (fn, exc)) + import traceback + + bbdir = os.path.dirname(__file__) + os.sep + exc_class, exc, tb = sys.exc_info() + for tb in iter(lambda: tb.tb_next, None): + # Skip frames in bitbake itself, we only want the metadata + fn, _, _, _ = traceback.extract_tb(tb, 1)[0] + if not fn.startswith(bbdir): + break + parselog.critical("Unable to parse %s", fn, exc_info=(exc_class, exc, tb)) sys.exit(1) return wrapped -- cgit v1.2.3-54-g00ecf