terminate when errors found in layer configuration
cover terminate when errors found in layer configuration
A single patch to ensure we stop parsing when errors are found in the layer configuration.
The patch (against poky, but applies cleanly with -p2 against bitbake master) is available in the git repository at:
git://git.yoctoproject.org/poky-contrib paule/bitbake-errors3
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=paule/bitbake-errors3
Paul Eggleton (1):
bitbake/cooker: terminate when errors found in layer configuration
bitbake/lib/bb/cooker.py | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-)
Signature · 1 line
1.7.5.4
PATCH 1/1 bitbake/cooker: terminate when errors found in layer configuration
If we find an error in the layer configuration (such as an unsatisfied item in LAYERDEPENDS) then exit by raising an exception at the end of handleCollections() (without producing a backtrace).
--- bitbake/lib/bb/cooker.py | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-)
bitbake/lib/bb/cooker.py +17 -0
@@ -55,6 +55,11 @@ class NothingToBuild(Exception): Exception raised when there is nothing to build """ +class CollectionError(bb.BBHandledException): + """ + Exception raised when layer configuration is incorrect + """ + class state: initial, parsing, running, shutdown, stop = range(5)
@@ -893,6 +898,7 @@ class BBCooker: def handleCollections( self, collections ): """Handle collections""" + errors = False self.status.bbfile_config_priorities = [] if collections: collection_priorities = {}
@@ -907,6 +913,7 @@ class BBCooker: prio = int(priority) except ValueError: parselog.error("invalid value for BBFILE_PRIORITY_%s: \"%s\"", c, priority) + errors = True if min_prio == 0 or prio < min_prio: min_prio = prio collection_priorities[c] = prio
@@ -925,6 +932,7 @@ class BBCooker: depver = int(depsplit[1]) except ValueError: parselog.error("invalid version value in LAYERDEPENDS_%s: \"%s\"", c, dep) + errors = True continue else: depver = None
@@ -939,13 +947,17 @@ class BBCooker: lver = int(layerver) except ValueError: parselog.error("invalid value for LAYERVERSION_%s: \"%s\"", c, layerver) + errors = True continue if lver <> depver: parselog.error("Layer dependency %s of layer %s is at version %d, expected %d", dep, c, lver, depver) + errors = True else: parselog.error("Layer dependency %s of layer %s has no version, expected %d", dep, c, depver) + errors = True else: parselog.error("Layer dependency %s of layer %s not found", dep, c) + errors = True collection_depends[c] = depnamelist else: collection_depends[c] = []
@@ -969,13 +981,18 @@ class BBCooker: regex = self.configuration.data.getVar("BBFILE_PATTERN_%s" % c, 1) if regex == None: parselog.error("BBFILE_PATTERN_%s not defined" % c) + errors = True continue try: cre = re.compile(regex) except re.error: parselog.error("BBFILE_PATTERN_%s \"%s\" is not a valid regular expression", c, regex) + errors = True continue self.status.bbfile_config_priorities.append((c, regex, cre, collection_priorities[c])) + if errors: + # We've already printed the actual error(s) + raise CollectionError("Errors during parsing layer configuration") def buildSetVars(self): """
Signature · 1 line
1.7.5.4