diff options
author | James Ennis <james.ennis@codethink.com> | 2019-02-05 09:43:06 +0000 |
---|---|---|
committer | James Ennis <james.ennis@codethink.com> | 2019-02-05 09:43:06 +0000 |
commit | b238b0ff90b74f891e50175c743c1283d6d4cb6f (patch) | |
tree | 12c1faf1f2c7aa74d965c450d6da6e899e02d4dd | |
parent | f4fa33c8583607d8f481259a81fd77bf1ef33945 (diff) | |
parent | 880a5c9a5237544559d126d1666150c865dabc16 (diff) | |
download | buildstream-b238b0ff90b74f891e50175c743c1283d6d4cb6f.tar.gz |
Merge branch 'doraskayo/filter-indirect-deps-fix-1.2' into 'bst-1.2'
filter.py: don't recurse when staging dependencies
See merge request BuildStream/buildstream!1127
-rw-r--r-- | buildstream/plugins/elements/filter.py | 6 | ||||
-rw-r--r-- | tests/plugins/filter.py | 20 | ||||
-rw-r--r-- | tests/plugins/filter/basic/elements/input-with-deps.bst | 14 | ||||
-rw-r--r-- | tests/plugins/filter/basic/elements/output-include-with-indirect-deps.bst | 5 |
4 files changed, 43 insertions, 2 deletions
diff --git a/buildstream/plugins/elements/filter.py b/buildstream/plugins/elements/filter.py index 22fddd14f..b2c292261 100644 --- a/buildstream/plugins/elements/filter.py +++ b/buildstream/plugins/elements/filter.py @@ -47,7 +47,9 @@ from buildstream import Element, ElementError, Scope class FilterElement(Element): # pylint: disable=attribute-defined-outside-init - # The filter element's output is it's dependencies, so + BST_ARTIFACT_VERSION = 1 + + # The filter element's output is its dependencies, so # we must rebuild if the dependencies change even when # not in strict build plans. BST_STRICT_REBUILD = True @@ -102,7 +104,7 @@ class FilterElement(Element): def assemble(self, sandbox): with self.timed_activity("Staging artifact", silent_nested=True): - for dep in self.dependencies(Scope.BUILD): + for dep in self.dependencies(Scope.BUILD, recurse=False): dep.stage_artifact(sandbox, include=self.include, exclude=self.exclude, orphans=self.include_orphans) return "" diff --git a/tests/plugins/filter.py b/tests/plugins/filter.py index 559815a8b..982b6d2c2 100644 --- a/tests/plugins/filter.py +++ b/tests/plugins/filter.py @@ -452,3 +452,23 @@ def test_filter_track_multi_exclude(datafiles, cli, tmpdir): assert "ref" not in new_input["sources"][0] new_input2 = _yaml.load(input2_file) assert new_input2["sources"][0]["ref"] == ref + + +@pytest.mark.datafiles(os.path.join(DATA_DIR, 'basic')) +def test_filter_include_with_indirect_deps(datafiles, cli, tmpdir): + project = os.path.join(datafiles.dirname, datafiles.basename) + result = cli.run(project=project, args=[ + 'build', 'output-include-with-indirect-deps.bst']) + result.assert_success() + + checkout = os.path.join(tmpdir.dirname, tmpdir.basename, 'checkout') + result = cli.run(project=project, args=[ + 'checkout', 'output-include-with-indirect-deps.bst', checkout]) + result.assert_success() + + # direct dependencies should be staged and filtered + assert os.path.exists(os.path.join(checkout, "baz")) + + # indirect dependencies shouldn't be staged and filtered + assert not os.path.exists(os.path.join(checkout, "foo")) + assert not os.path.exists(os.path.join(checkout, "bar")) diff --git a/tests/plugins/filter/basic/elements/input-with-deps.bst b/tests/plugins/filter/basic/elements/input-with-deps.bst new file mode 100644 index 000000000..50aab573c --- /dev/null +++ b/tests/plugins/filter/basic/elements/input-with-deps.bst @@ -0,0 +1,14 @@ +kind: import + +depends: +- filename: input.bst + +sources: +- kind: local + path: files + +public: + bst: + split-rules: + baz: + - /baz diff --git a/tests/plugins/filter/basic/elements/output-include-with-indirect-deps.bst b/tests/plugins/filter/basic/elements/output-include-with-indirect-deps.bst new file mode 100644 index 000000000..8325853e2 --- /dev/null +++ b/tests/plugins/filter/basic/elements/output-include-with-indirect-deps.bst @@ -0,0 +1,5 @@ +kind: filter + +depends: +- filename: input-with-deps.bst + type: build |