summaryrefslogtreecommitdiff
path: root/buildstream/_stream.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildstream/_stream.py')
-rw-r--r--buildstream/_stream.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/buildstream/_stream.py b/buildstream/_stream.py
index 14398b90d..2580134e3 100644
--- a/buildstream/_stream.py
+++ b/buildstream/_stream.py
@@ -560,8 +560,9 @@ class Stream():
# targets (list of str): The target elements to reset the workspace for
# soft (bool): Only reset workspace state
# track_first (bool): Whether to also track the sources first
+ # fetch (bool): Enable auto-fetching of target and related junction(s)
#
- def workspace_reset(self, targets, *, soft, track_first):
+ def workspace_reset(self, targets, *, soft, track_first, fetch):
if track_first:
track_targets = targets
@@ -570,7 +571,8 @@ class Stream():
elements, track_elements = self._load(targets, track_targets,
selection=PipelineSelection.REDIRECT,
- track_selection=PipelineSelection.REDIRECT)
+ track_selection=PipelineSelection.REDIRECT,
+ fetch_subprojects=fetch)
nonexisting = []
for element in elements:
@@ -579,9 +581,18 @@ class Stream():
if nonexisting:
raise StreamError("Workspace does not exist", detail="\n".join(nonexisting))
- # Do the tracking first
+ to_track = []
if track_first:
- self._fetch(elements, track_elements=track_elements)
+ to_track = track_elements
+
+ to_fetch = []
+ if fetch:
+ to_fetch = elements
+
+ if to_fetch or to_track:
+ self._fetch(to_fetch, track_elements=to_track)
+
+ self._pipeline.assert_sources_cached(elements)
workspaces = self._context.get_workspaces()