summaryrefslogtreecommitdiff
path: root/buildstream/_stream.py
diff options
context:
space:
mode:
authorValentin David <valentin.david@codethink.co.uk>2018-05-14 18:48:32 +0200
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2018-06-08 21:07:22 +0000
commitacde3ba8fa09605775a6627398bc2af26658d69a (patch)
tree21c76c943f28f13587d9f0dd43c43b85e06e1d4a /buildstream/_stream.py
parent130bfbb84e0de2c2289b9dd708b3f79682d140f4 (diff)
downloadbuildstream-acde3ba8fa09605775a6627398bc2af26658d69a.tar.gz
Allow tracking dependencies within sub-projects.
--track-cross-junctions now concerns crossing junctions rather than forbidding elements in sub-project to be tracked. Part of #359.
Diffstat (limited to 'buildstream/_stream.py')
-rw-r--r--buildstream/_stream.py24
1 files changed, 21 insertions, 3 deletions
diff --git a/buildstream/_stream.py b/buildstream/_stream.py
index c2fce58c0..0680f2a1f 100644
--- a/buildstream/_stream.py
+++ b/buildstream/_stream.py
@@ -831,12 +831,30 @@ class Stream():
# done before resolving element states.
#
assert track_selection != PipelineSelection.PLAN
- track_selected = self._pipeline.get_selection(track_elements, track_selection)
+
+ # Tracked elements are split by owner projects in order to
+ # filter cross junctions tracking dependencies on their
+ # respective project.
+ track_projects = {}
+ for element in track_elements:
+ project = element._get_project()
+ if project not in track_projects:
+ track_projects[project] = [element]
+ else:
+ track_projects[project].append(element)
+
+ track_selected = []
+
+ for project, project_elements in track_projects.items():
+ selected = self._pipeline.get_selection(project_elements, track_selection)
+ selected = self._pipeline.track_cross_junction_filter(project,
+ selected,
+ track_cross_junctions)
+ track_selected.extend(selected)
+
track_selected = self._pipeline.except_elements(track_elements,
track_selected,
track_except_elements)
- track_selected = self._pipeline.track_cross_junction_filter(track_selected,
- track_cross_junctions)
for element in track_selected:
element._schedule_tracking()