diff options
author | Jürg Billeter <j@bitron.ch> | 2020-02-19 15:18:41 +0100 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2020-02-27 12:33:57 +0000 |
commit | 9892ae36805a7deb411da81a18830d7c9d63cbc6 (patch) | |
tree | 0d7694ac2991a515fc620cca1c88ba01b0f82cde | |
parent | e842b94e0e77c027751381be7cc4ac0e73ae39f1 (diff) | |
download | buildstream-9892ae36805a7deb411da81a18830d7c9d63cbc6.tar.gz |
_sandboxreapi.py: Ensure mount points exist
-rw-r--r-- | src/buildstream/sandbox/_sandboxreapi.py | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/buildstream/sandbox/_sandboxreapi.py b/src/buildstream/sandbox/_sandboxreapi.py index 19c599197..888ba735e 100644 --- a/src/buildstream/sandbox/_sandboxreapi.py +++ b/src/buildstream/sandbox/_sandboxreapi.py @@ -67,10 +67,24 @@ class SandboxREAPI(Sandbox): for mark in self._get_marked_directories(): directory = mark["directory"] if directory in mount_sources: - continue - # Create each marked directory - vdir.descend(*directory.split(os.path.sep), create=True) - read_write_directories.append(directory) + # Bind mount + mount_point = directory + mount_source = mount_sources[mount_point] + + # Ensure mount point exists in sandbox + mount_point_components = mount_point.split(os.path.sep) + if not vdir._exists(*mount_point_components): + if os.path.isdir(mount_source): + # Mounting a directory, mount point must be a directory + vdir.descend(*mount_point_components, create=True) + else: + # Mounting a file or device node, mount point must be a file + parent_vdir = vdir.descend(*mount_point_components[:-1], create=True) + parent_vdir._create_empty_file(mount_point_components[-1]) + else: + # Read-write directory + vdir.descend(*directory.split(os.path.sep), create=True) + read_write_directories.append(directory) if not flags & SandboxFlags.ROOT_READ_ONLY: # The whole sandbox is writable |