diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2017-11-07 17:55:22 +0000 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2017-11-08 08:03:15 +0000 |
commit | 34ba445fd1963acada0733c196483c98a57fd753 (patch) | |
tree | 2d7cbd9de644aa8b28a3576de483cbfe0e03f685 /tests/yaml | |
parent | 2780cdbde866a65108d10d030fe7d40015df1b27 (diff) | |
download | buildstream-34ba445fd1963acada0733c196483c98a57fd753.tar.gz |
Allow overwriting a list with an empty list using (=) operatorsam/overwrite-list-with-empty-list
I found myself writing the following split rules for an element:
public:
bst:
split-rules:
runtime:
(=): []
devel:
(>):
- |
%{bindir}/*
The aim was to put all of this element's binaries into the 'devel'
domain, and make sure nothing went into the 'runtime' domain by
replacing the built-in rules for that domain with an empty list.
That wasn't working though because BuildStream was using [] (empty list)
as a sentinel to mean "do nothing", which is fine for the prepend and
append operators (prepending an empty list to a list has no effect) but
is not really correct for the overwrite operator.
This commit fixes that issue and adds a test.
Diffstat (limited to 'tests/yaml')
-rw-r--r-- | tests/yaml/data/listoverwriteempty.yaml | 3 | ||||
-rw-r--r-- | tests/yaml/yaml.py | 14 |
2 files changed, 17 insertions, 0 deletions
diff --git a/tests/yaml/data/listoverwriteempty.yaml b/tests/yaml/data/listoverwriteempty.yaml new file mode 100644 index 000000000..f97a1eafe --- /dev/null +++ b/tests/yaml/data/listoverwriteempty.yaml @@ -0,0 +1,3 @@ +# Composited on top of basics.yaml, effectively deleting its children list +children: + (=): [] diff --git a/tests/yaml/yaml.py b/tests/yaml/yaml.py index 0aae28f08..a462e18df 100644 --- a/tests/yaml/yaml.py +++ b/tests/yaml/yaml.py @@ -213,6 +213,20 @@ def test_list_composition(datafiles, filename, assert_provenance(prov_file, prov_line, prov_col, child, 'mood') +# Test that overwriting a list with an empty list works as expected. +@pytest.mark.datafiles(os.path.join(DATA_DIR)) +def test_list_deletion(datafiles): + base = os.path.join(datafiles.dirname, datafiles.basename, 'basics.yaml') + overlay = os.path.join(datafiles.dirname, datafiles.basename, 'listoverwriteempty.yaml') + + base = _yaml.load(base, shortname='basics.yaml') + overlay = _yaml.load(overlay, shortname='listoverwriteempty.yaml') + _yaml.composite_dict(base, overlay) + + children = _yaml.node_get(base, list, 'children') + assert len(children) == 0 + + # Tests for deep list composition # # Same as test_list_composition(), but adds an additional file |