diff options
Diffstat (limited to 'buildstream/_options/optionpool.py')
-rw-r--r-- | buildstream/_options/optionpool.py | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/buildstream/_options/optionpool.py b/buildstream/_options/optionpool.py index 41990ce4a..f38682aec 100644 --- a/buildstream/_options/optionpool.py +++ b/buildstream/_options/optionpool.py @@ -233,12 +233,19 @@ class OptionPool(): expression, value = tuples[0] try: - if self.evaluate(expression): - _yaml.composite(node, value) + apply_fragment = self.evaluate(expression) except LoadError as e: # Prepend the provenance of the error raise LoadError(e.reason, "{}: {}".format(p, e)) from e + if not hasattr(value, 'get'): + raise LoadError(LoadErrorReason.ILLEGAL_COMPOSITE, + "{}: Only values of type 'dict' can be composed.".format(p)) + + # Apply the yaml fragment if its condition evaluates to true + if apply_fragment: + _yaml.composite(node, value) + return True return False |