diff options
Diffstat (limited to 'lib/bb/cooker.py')
-rw-r--r-- | lib/bb/cooker.py | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index c8d898ef2..70a44c62f 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -32,6 +32,7 @@ import sre_constants import threading from cStringIO import StringIO from contextlib import closing +from functools import wraps import bb from bb import utils, data, parse, event, cache, providers, taskdata, command, runqueue @@ -495,12 +496,6 @@ class BBCooker: path, _ = os.path.split(path) def parseConfigurationFiles(self, files): - def _parse(f, data, include=False): - try: - return bb.parse.handle(f, data, include) - except (IOError, bb.parse.ParseError) as exc: - parselog.critical("Unable to parse %s: %s" % (f, exc)) - sys.exit(1) data = self.configuration.data bb.parse.init_parser(data) @@ -941,6 +936,21 @@ def parse_file(task): exc.recipe = filename raise exc +def catch_parse_error(func): + """Exception handling bits for our parsing""" + @wraps(func) + def wrapped(fn, *args): + try: + return func(fn, *args) + except (IOError, bb.parse.ParseError) as exc: + parselog.critical("Unable to parse %s: %s" % (fn, exc)) + sys.exit(1) + return wrapped + +@catch_parse_error +def _parse(fn, data, include=False): + return bb.parse.handle(fn, data, include) + class CookerParser(object): def __init__(self, cooker, filelist, masked): self.filelist = filelist |