You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by gi...@apache.org on 2020/12/29 13:21:01 UTC

[buildstream] 01/03: Use a _get_real_element() method in workspace commands

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch 214-filter-workspacing-rework
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 9b42cf1ae51cd8fb75273438288f7ccabd4c514b
Author: Jonathan Maw <jo...@codethink.co.uk>
AuthorDate: Wed Mar 21 15:33:21 2018 +0000

    Use a _get_real_element() method in workspace commands
    
    The _get_real_element() method is used in case some elements decide that
    workspace commands should be redirected to another element.
---
 buildstream/_frontend/cli.py |  7 +++++--
 buildstream/_pipeline.py     | 16 ++++++++++++++++
 buildstream/element.py       |  3 +++
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/buildstream/_frontend/cli.py b/buildstream/_frontend/cli.py
index c0bf741..6003b30 100644
--- a/buildstream/_frontend/cli.py
+++ b/buildstream/_frontend/cli.py
@@ -618,7 +618,7 @@ def workspace():
 def workspace_open(app, no_checkout, force, track_, element, directory):
     """Open a workspace for manual source modification"""
 
-    app.initialize((element,), rewritable=track_, track_elements=[element] if track_ else None)
+    app.initialize((element,), rewritable=track_)
     try:
         app.pipeline.open_workspace(app.scheduler, directory, no_checkout, track_, force)
         click.echo("", err=True)
@@ -641,7 +641,10 @@ def workspace_close(app, remove_dir, element):
 
     app.initialize((element,))
 
-    if app.pipeline.project._get_workspace(app.pipeline.targets[0].name) is None:
+    target = app.pipeline.targets[0]
+    target = target._get_real_element()
+
+    if app.pipeline.project._get_workspace(target.name) is None:
         click.echo("ERROR: Workspace '{}' does not exist".format(element), err=True)
         sys.exit(-1)
 
diff --git a/buildstream/_pipeline.py b/buildstream/_pipeline.py
index d4f65b4..18bef5c 100644
--- a/buildstream/_pipeline.py
+++ b/buildstream/_pipeline.py
@@ -616,6 +616,15 @@ class Pipeline():
     def open_workspace(self, scheduler, directory, no_checkout, track_first, force):
         # When working on workspaces we only have one target
         target = self.targets[0]
+
+        # Some elements act as proxies for other elements
+        target = target._get_real_element()
+
+        # Ordinarily, this would be done by pipeline initialization, but we need the
+        # elements initialized before we know which ones to track.
+        if track_first:
+            self.resolve_cache_keys([target.name])
+
         workdir = os.path.abspath(directory)
 
         if not list(target.sources()):
@@ -698,6 +707,9 @@ class Pipeline():
         # When working on workspaces we only have one target
         target = self.targets[0]
 
+        # Some elements act as proxies for other elements
+        target = target._get_real_element()
+
         # Remove workspace directory if prompted
         if remove_dir:
             path = self.project._get_workspace(target.name)
@@ -738,6 +750,10 @@ class Pipeline():
     def reset_workspace(self, scheduler, track, no_checkout):
         # When working on workspaces we only have one target
         target = self.targets[0]
+
+        # Some elements act as proxies for other elements
+        target = target._get_real_element()
+
         workspace_dir = self.project._get_workspace(target.name)
 
         if workspace_dir is None:
diff --git a/buildstream/element.py b/buildstream/element.py
index b62945f..f1f34b3 100644
--- a/buildstream/element.py
+++ b/buildstream/element.py
@@ -1958,6 +1958,9 @@ class Element(Plugin):
     def _subst_string(self, value):
         return self.__variables.subst(value)
 
+    def _get_real_element(self):
+        return self
+
 
 def _overlap_error_detail(f, forbidden_overlap_elements, elements):
     if forbidden_overlap_elements: