diff options
-rw-r--r-- | src/buildstream/storage/_filebaseddirectory.py | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/buildstream/storage/_filebaseddirectory.py b/src/buildstream/storage/_filebaseddirectory.py index c492c41cd..a2708c4eb 100644 --- a/src/buildstream/storage/_filebaseddirectory.py +++ b/src/buildstream/storage/_filebaseddirectory.py @@ -268,6 +268,13 @@ class FileBasedDirectory(Directory): if "r" in mode: return open(newpath, mode=mode, encoding=encoding) else: + if "x" in mode: + # This check is not atomic, however, we're operating with a + # single thread in a private directory tree. + if subdir.exists(path[-1]): + raise FileExistsError("{} already exists in {}".format(path[-1], str(subdir))) + mode = "w" + mode[1:] + return utils.save_file_atomic(newpath, mode=mode, encoding=encoding) def __str__(self): |