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

[buildstream] branch willsalmon/checkout_no_sandbox created (now ef44916)

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

not-in-ldap pushed a change to branch willsalmon/checkout_no_sandbox
in repository https://gitbox.apache.org/repos/asf/buildstream.git.


      at ef44916  Do not use a sandbox when not required for checkout

This branch includes the following new commits:

     new ef44916  Do not use a sandbox when not required for checkout

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[buildstream] 01/01: Do not use a sandbox when not required for checkout

Posted by no...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

not-in-ldap pushed a commit to branch willsalmon/checkout_no_sandbox
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit ef44916b4339a26ff3fb54c04b70f00c36a47dc1
Author: William Salmon <wi...@codethink.co.uk>
AuthorDate: Fri Jul 3 16:50:18 2020 +0100

    Do not use a sandbox when not required for checkout
---
 src/buildstream/_stream.py      | 14 +++++++++++---
 src/buildstream/buildelement.py |  2 +-
 src/buildstream/element.py      |  9 ++++-----
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py
index 3d646a7..95832bb 100644
--- a/src/buildstream/_stream.py
+++ b/src/buildstream/_stream.py
@@ -55,6 +55,7 @@ from .types import _KeyStrength, _PipelineSelection, _SchedulerErrorAction
 from .plugin import Plugin
 from . import utils, _yaml, _site
 from . import Scope
+from .storage._casbaseddirectory import CasBasedDirectory
 
 
 # Stream()
@@ -553,9 +554,16 @@ class Stream:
                 _PipelineSelection.NONE: Scope.NONE,
                 _PipelineSelection.ALL: Scope.ALL,
             }
-            with target._prepare_sandbox(scope=scope[selection], integrate=integrate) as sandbox:
-                # Copy or move the sandbox to the target directory
-                virdir = sandbox.get_virtual_directory()
+            if integrate:
+                with target._prepare_sandbox(scope=scope[selection], integrate=integrate) as sandbox:
+                    # Copy or move the sandbox to the target directory
+                    virdir = sandbox.get_virtual_directory()
+                    self._export_artifact(tar, location, compression, target, hardlinks, virdir)
+            else:
+                # This allows for checking out elements when they were build with a non local sandbox
+                virdir = CasBasedDirectory(target._get_context().get_cascache())
+                with target.timed_activity("Staging dependencies", silent_nested=True):
+                    target.stage_dependency_artifacts(virdir, scope[selection])
                 self._export_artifact(tar, location, compression, target, hardlinks, virdir)
         except BstError as e:
             raise StreamError(
diff --git a/src/buildstream/buildelement.py b/src/buildstream/buildelement.py
index aa42706..cec8072 100644
--- a/src/buildstream/buildelement.py
+++ b/src/buildstream/buildelement.py
@@ -222,7 +222,7 @@ class BuildElement(Element):
 
         # Stage deps in the sandbox root
         with self.timed_activity("Staging dependencies", silent_nested=True):
-            self.stage_dependency_artifacts(sandbox, Scope.BUILD)
+            self.stage_dependency_artifacts(sandbox.get_virtual_directory(), Scope.BUILD)
 
         # Run any integration commands provided by the dependencies
         # once they are all staged and ready
diff --git a/src/buildstream/element.py b/src/buildstream/element.py
index 6a0fa5f..a87ff73 100644
--- a/src/buildstream/element.py
+++ b/src/buildstream/element.py
@@ -609,7 +609,7 @@ class Element(Plugin):
 
     def stage_artifact(
         self,
-        sandbox: "Sandbox",
+        vbasedir: "Directory",
         *,
         path: str = None,
         include: Optional[List[str]] = None,
@@ -668,7 +668,6 @@ class Element(Plugin):
 
             # Hard link it into the staging area
             #
-            vbasedir = sandbox.get_virtual_directory()
             vstagedir = vbasedir if path is None else vbasedir.descend(*path.lstrip(os.sep).split(os.sep), create=True)
 
             split_filter = self.__split_filter_func(include, exclude, orphans)
@@ -681,7 +680,7 @@ class Element(Plugin):
 
     def stage_dependency_artifacts(
         self,
-        sandbox: "Sandbox",
+        vbasedir: "Directory",
         scope: Scope,
         *,
         path: str = None,
@@ -714,7 +713,7 @@ class Element(Plugin):
         files_written = {}  # type: Dict[str, List[str]]
 
         for dep in self.dependencies(scope):
-            result = dep.stage_artifact(sandbox, path=path, include=include, exclude=exclude, orphans=orphans)
+            result = dep.stage_artifact(vbasedir, path=path, include=include, exclude=exclude, orphans=orphans)
             if result.overwritten:
                 for overwrite in result.overwritten:
                     # Completely new overwrite
@@ -1286,7 +1285,7 @@ class Element(Plugin):
             else:
                 # Stage deps in the sandbox root
                 with self.timed_activity("Staging dependencies", silent_nested=True):
-                    self.stage_dependency_artifacts(sandbox, scope)
+                    self.stage_dependency_artifacts(sandbox.get_virtual_directory(), scope)
 
                 # Run any integration commands provided by the dependencies
                 # once they are all staged and ready