diff options
author | James Ennis <james.ennis@codethink.co.uk> | 2019-03-04 16:01:48 +0000 |
---|---|---|
committer | James Ennis <james.ennis@codethink.co.uk> | 2019-03-06 12:16:40 +0000 |
commit | 3b6b538e2210cdf9daca79e04148ab5571b5e2ed (patch) | |
tree | a99f1da860a7bcc116fa19e445d5a64c00bd514a | |
parent | 66edc2818ebcc8a470e6dc9878c15e2cca672e3b (diff) | |
download | buildstream-3b6b538e2210cdf9daca79e04148ab5571b5e2ed.tar.gz |
_include.py: Move yaml related logic to _yaml.pyjennis/compose_backwards
-rw-r--r-- | buildstream/_includes.py | 7 | ||||
-rw-r--r-- | buildstream/_yaml.py | 12 |
2 files changed, 13 insertions, 6 deletions
diff --git a/buildstream/_includes.py b/buildstream/_includes.py index 1312d1982..f4a162761 100644 --- a/buildstream/_includes.py +++ b/buildstream/_includes.py @@ -82,12 +82,7 @@ class Includes: finally: included.remove(file_path) - _yaml.composite(include_node, node) - to_delete = [key for key, _ in _yaml.node_items(node) if key not in include_node] - for key, value in include_node.items(): - node[key] = value - for key in to_delete: - del node[key] + _yaml.composite_and_move(node, include_node) for _, value in _yaml.node_items(node): self._process_value(value, diff --git a/buildstream/_yaml.py b/buildstream/_yaml.py index 230094c22..74ed1bbf8 100644 --- a/buildstream/_yaml.py +++ b/buildstream/_yaml.py @@ -903,6 +903,18 @@ def composite(target, source): e.actual_type.__name__)) from e +# Like composite(target, source), but where target overrides source instead. +# +def composite_and_move(target, source): + composite(source, target) + + to_delete = [key for key, _ in node_items(target) if key not in source] + for key, value in source.items(): + target[key] = value + for key in to_delete: + del target[key] + + # SanitizedDict is an OrderedDict that is dumped as unordered mapping. # This provides deterministic output for unordered mappings. # |