diff options
author | Valentin David <valentin.david@codethink.co.uk> | 2018-05-14 18:48:32 +0200 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2018-06-08 21:07:22 +0000 |
commit | acde3ba8fa09605775a6627398bc2af26658d69a (patch) | |
tree | 21c76c943f28f13587d9f0dd43c43b85e06e1d4a /buildstream/_stream.py | |
parent | 130bfbb84e0de2c2289b9dd708b3f79682d140f4 (diff) | |
download | buildstream-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.py | 24 |
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() |