summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildstream/sandbox/_sandboxbwrap.py12
-rw-r--r--buildstream/sandbox/_sandboxchroot.py3
-rw-r--r--buildstream/sandbox/sandbox.py4
3 files changed, 8 insertions, 11 deletions
diff --git a/buildstream/sandbox/_sandboxbwrap.py b/buildstream/sandbox/_sandboxbwrap.py
index 5effadf41..8c406e53e 100644
--- a/buildstream/sandbox/_sandboxbwrap.py
+++ b/buildstream/sandbox/_sandboxbwrap.py
@@ -108,9 +108,6 @@ class SandboxBwrap(Sandbox):
bwrap_command += ['--unshare-uts', '--hostname', 'buildstream']
bwrap_command += ['--unshare-ipc']
- if cwd is not None:
- bwrap_command += ['--chdir', cwd]
-
# Give it a proc and tmpfs
bwrap_command += [
'--proc', '/proc',
@@ -151,6 +148,10 @@ class SandboxBwrap(Sandbox):
if flags & SandboxFlags.ROOT_READ_ONLY:
bwrap_command += ["--remount-ro", "/"]
+ if cwd is not None:
+ bwrap_command += ['--dir', cwd]
+ bwrap_command += ['--chdir', cwd]
+
# Set UID and GUI
if self.user_ns_available:
bwrap_command += ['--unshare-user']
@@ -179,11 +180,6 @@ class SandboxBwrap(Sandbox):
with ExitStack() as stack:
stack.enter_context(mount_map.mounted(self))
- # Ensure the cwd exists
- if cwd is not None:
- workdir = os.path.join(root_mount_source, cwd.lstrip(os.sep))
- os.makedirs(workdir, exist_ok=True)
-
# If we're interactive, we want to inherit our stdin,
# otherwise redirect to /dev/null, ensuring process
# disconnected from terminal.
diff --git a/buildstream/sandbox/_sandboxchroot.py b/buildstream/sandbox/_sandboxchroot.py
index b3a2a6d9d..f19052b23 100644
--- a/buildstream/sandbox/_sandboxchroot.py
+++ b/buildstream/sandbox/_sandboxchroot.py
@@ -100,9 +100,8 @@ class SandboxChroot(Sandbox):
# Ensure the cwd exists
if cwd is not None:
- workdir = os.path.join(root_mount_source, cwd.lstrip(os.sep))
+ workdir = os.path.join(rootfs, cwd.lstrip(os.sep))
os.makedirs(workdir, exist_ok=True)
-
status = self.chroot(rootfs, command, stdin, stdout,
stderr, cwd, env, flags)
diff --git a/buildstream/sandbox/sandbox.py b/buildstream/sandbox/sandbox.py
index 42cfb9a15..83714efdd 100644
--- a/buildstream/sandbox/sandbox.py
+++ b/buildstream/sandbox/sandbox.py
@@ -223,7 +223,9 @@ class Sandbox():
.. note::
The optional *cwd* argument will default to the value set with
- :func:`~buildstream.sandbox.Sandbox.set_work_directory`
+ :func:`~buildstream.sandbox.Sandbox.set_work_directory` and this
+ function must make sure the directory will be created if it does
+ not exist yet, even if a workspace is being used.
"""
raise ImplError("Sandbox of type '{}' does not implement run()"
.format(type(self).__name__))