summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim MacArthur <jim.macarthur@codethink.co.uk>2018-05-02 18:24:33 +0100
committerJim MacArthur <jim.macarthur@codethink.co.uk>2018-05-17 10:10:29 +0100
commit6fcd95a9d3a00102f3c82f0c95cb7fa3d81cc3cc (patch)
treecf1aea5e5a8d0853a5daebb815f04f8a277449b4
parente023beb56b180316a58f409d48f158e9dc1ece95 (diff)
downloadbuildstream-6fcd95a9d3a00102f3c82f0c95cb7fa3d81cc3cc.tar.gz
Add BST_VIRTUAL_DIRECTORY flag for element plugins
-rw-r--r--buildstream/element.py10
-rw-r--r--buildstream/sandbox/sandbox.py13
2 files changed, 19 insertions, 4 deletions
diff --git a/buildstream/element.py b/buildstream/element.py
index 70bee42e6..bd1721ba8 100644
--- a/buildstream/element.py
+++ b/buildstream/element.py
@@ -192,6 +192,13 @@ class Element(Plugin):
*Since: 1.2*
"""
+ BST_VIRTUAL_DIRECTORY = False
+ """Whether to raise exceptions if an element uses Sandbox.get_directory
+ instead of Sandbox.get_virtual_directory.
+
+ *Since: 1.2*
+ """
+
def __init__(self, context, project, artifacts, meta, plugin_conf):
super().__init__(meta.name, context, project, meta.provenance, "element")
@@ -2068,7 +2075,8 @@ class Element(Plugin):
directory,
stdout=stdout,
stderr=stderr,
- config=config)
+ config=config,
+ allow_real_directory=not self.BST_VIRTUAL_DIRECTORY)
yield sandbox
else:
diff --git a/buildstream/sandbox/sandbox.py b/buildstream/sandbox/sandbox.py
index 3ab75f1a8..4f0bd077c 100644
--- a/buildstream/sandbox/sandbox.py
+++ b/buildstream/sandbox/sandbox.py
@@ -31,7 +31,7 @@ See also: :ref:`sandboxing`.
"""
import os
-from .._exceptions import ImplError
+from .._exceptions import ImplError, BstError
class SandboxFlags():
@@ -92,6 +92,8 @@ class Sandbox():
self.__cwd = None
self.__env = None
self.__mount_sources = {}
+ self.__allow_real_directory = kwargs['allow_real_directory']
+
# Configuration from kwargs common to all subclasses
self.__config = kwargs['config']
self.__stdout = kwargs['stdout']
@@ -108,12 +110,17 @@ class Sandbox():
"""Fetches the sandbox root directory
The root directory is where artifacts for the base
- runtime environment should be staged.
+ runtime environment should be staged. Only works if
+ BST_VIRTUAL_DIRECTORY is not set.
Returns:
(str): The sandbox root directory
+
"""
- return self.__root
+ if self.__allow_real_directory:
+ return self.__root
+ else:
+ raise BstError("You can't use get_directory")
def set_environment(self, environment):
"""Sets the environment variables for the sandbox