diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryFileSystem.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryFileSystem.java | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryFileSystem.java b/src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryFileSystem.java index ff6d88a387..0008423cc9 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryFileSystem.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryFileSystem.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.vfs.inmemoryfs; import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; import com.google.devtools.build.lib.clock.Clock; import com.google.devtools.build.lib.clock.JavaClock; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; @@ -624,6 +625,22 @@ public class InMemoryFileSystem extends FileSystem { } @Override + public synchronized void createDirectoryAndParents(Path path) throws IOException { + List<Path> subdirs = new ArrayList<>(); + for (; !path.isRootDirectory(); path = path.getParentDirectory()) { + if (path.isDirectory()) { + break; + } else if (path.exists()) { + throw new IOException("Not a directory: " + path); + } + subdirs.add(path); + } + for (Path subdir : Lists.reverse(subdirs)) { + subdir.createDirectory(); + } + } + + @Override protected void createSymbolicLink(Path path, PathFragment targetFragment) throws IOException { if (path.equals(getRootDirectory())) { |