summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2020-01-16 11:53:26 +0100
committerJürg Billeter <j@bitron.ch>2020-02-03 18:44:30 +0000
commit044a9c6d896faec114a09db1ab561b1a571c1bac (patch)
tree5379d155cb52613debd6f94dc99eb6f8569a8ef7
parentf7239fe2c8d51f85412443c8ca00870626696090 (diff)
downloadbuildstream-044a9c6d896faec114a09db1ab561b1a571c1bac.tar.gz
_sandboxbuildboxrun.py: Support host-files
-rw-r--r--src/buildstream/sandbox/_sandboxbuildboxrun.py21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/buildstream/sandbox/_sandboxbuildboxrun.py b/src/buildstream/sandbox/_sandboxbuildboxrun.py
index dd70f944b..7b4362cb1 100644
--- a/src/buildstream/sandbox/_sandboxbuildboxrun.py
+++ b/src/buildstream/sandbox/_sandboxbuildboxrun.py
@@ -24,6 +24,7 @@ import psutil
from .. import utils, _signals
from . import SandboxFlags
from .._exceptions import SandboxError
+from .._message import Message, MessageType
from .._protos.build.bazel.remote.execution.v2 import remote_execution_pb2
from ._sandboxreapi import SandboxREAPI
@@ -45,7 +46,7 @@ class SandboxBuildBoxRun(SandboxREAPI):
cls._dummy_reasons += ["buildbox-run not found"]
raise SandboxError(" and ".join(cls._dummy_reasons), reason="unavailable-local-sandbox") from Error
- exit_code, output = utils._call([path, "--capabilities"])
+ exit_code, output = utils._call([path, "--capabilities"], stdout=subprocess.PIPE)
if exit_code == 0:
# buildbox-run --capabilities prints one capability per line
cls._capabilities = set(output.split("\n"))
@@ -86,6 +87,21 @@ class SandboxBuildBoxRun(SandboxREAPI):
"--action-result={}".format(result_file.name),
]
+ marked_directories = self._get_marked_directories()
+ mount_sources = self._get_mount_sources()
+ for mark in marked_directories:
+ mount_point = mark["directory"]
+ mount_source = mount_sources.get(mount_point)
+ if not mount_source:
+ # Handled by the input tree in the action
+ continue
+
+ if "bind-mount" not in self._capabilities:
+ self._warn("buildbox-run does not support host-files")
+ break
+
+ buildbox_command.append("--bind-mount={}:{}".format(mount_source, mount_point))
+
# If we're interactive, we want to inherit our stdin,
# otherwise redirect to /dev/null, ensuring process
# disconnected from terminal.
@@ -154,3 +170,6 @@ class SandboxBuildBoxRun(SandboxREAPI):
if returncode != 0:
raise SandboxError("buildbox-run failed with returncode {}".format(returncode))
+
+ def _warn(self, msg):
+ self._get_context().messenger.message(Message(MessageType.WARN, msg))