aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2017-10-27 12:12:11 -0400
committerGravatar John Cater <jcater@google.com>2017-10-30 10:40:06 -0400
commitf903eb5ace7e4d9e72ca95f3e5fa39816be93a76 (patch)
tree3f5f33de008ecd0c82996a134fad2968146312e3 /src/main/java/com
parent4abd9434447e08c70266cc5583456816537718c3 (diff)
Thread FileSystem through to a single Path#delete call site.
This requires a fairly large amount of changes to fundamental objects like BlazeRuntime, Executor, and so on, as well as changing a lot of test code to thread the file system through. I expect future CLs to be much smaller. PiperOrigin-RevId: 173678144
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Action.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Executor.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/exec/BlazeExecutor.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java52
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/Path.java20
31 files changed, 146 insertions, 89 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
index 477baa15da..0ace01b68b 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -36,6 +36,7 @@ import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.Symlinks;
@@ -369,23 +370,22 @@ public abstract class AbstractAction implements Action, SkylarkValue {
}
/**
- * Deletes all of the action's output files, if they exist. If any of the
- * Artifacts refers to a directory recursively removes the contents of the
- * directory.
+ * Deletes all of the action's output files, if they exist. If any of the Artifacts refers to a
+ * directory recursively removes the contents of the directory.
*
* @param execRoot the exec root in which this action is executed
*/
- protected void deleteOutputs(Path execRoot) throws IOException {
+ protected void deleteOutputs(FileSystem fileSystem, Path execRoot) throws IOException {
for (Artifact output : getOutputs()) {
- deleteOutput(output);
+ deleteOutput(fileSystem, output);
}
}
/**
- * Helper method to remove an Artifact. If the Artifact refers to a directory
- * recursively removes the contents of the directory.
+ * Helper method to remove an Artifact. If the Artifact refers to a directory recursively removes
+ * the contents of the directory.
*/
- protected void deleteOutput(Artifact output) throws IOException {
+ protected void deleteOutput(FileSystem fileSystem, Artifact output) throws IOException {
Path path = output.getPath();
try {
// Optimize for the common case: output artifacts are files.
@@ -405,7 +405,7 @@ public abstract class AbstractAction implements Action, SkylarkValue {
if (!parentDir.isWritable() && parentDir.getPathString().startsWith(outputRootDir)) {
// Retry deleting after making the parent writable.
parentDir.setWritable(true);
- deleteOutput(output);
+ deleteOutput(fileSystem, output);
} else if (path.isDirectory(Symlinks.NOFOLLOW)) {
FileSystemUtils.deleteTree(path);
} else {
@@ -465,8 +465,8 @@ public abstract class AbstractAction implements Action, SkylarkValue {
}
@Override
- public void prepare(Path execRoot) throws IOException {
- deleteOutputs(execRoot);
+ public void prepare(FileSystem fileSystem, Path execRoot) throws IOException {
+ deleteOutputs(fileSystem, execRoot);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Action.java b/src/main/java/com/google/devtools/build/lib/actions/Action.java
index e87d79edcf..524c20aa94 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Action.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Action.java
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.actions;
import com.google.devtools.build.lib.actions.extra.ExtraActionInfo;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ConditionallyThreadCompatible;
import com.google.devtools.build.lib.profiler.Describable;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.SkyFunction;
import java.io.IOException;
@@ -77,16 +78,14 @@ import javax.annotation.Nullable;
public interface Action extends ActionExecutionMetadata, Describable {
/**
- * Prepares for executing this action; called by the Builder prior to
- * executing the Action itself. This method should prepare the file system, so
- * that the execution of the Action can write the output files. At a minimum
- * any pre-existing and write protected output files should be removed or the
- * permissions should be changed, so that they can be safely overwritten by
- * the action.
+ * Prepares for executing this action; called by the Builder prior to executing the Action itself.
+ * This method should prepare the file system, so that the execution of the Action can write the
+ * output files. At a minimum any pre-existing and write protected output files should be removed
+ * or the permissions should be changed, so that they can be safely overwritten by the action.
*
* @throws IOException if there is an error deleting the outputs.
*/
- void prepare(Path execRoot) throws IOException;
+ void prepare(FileSystem fileSystem, Path execRoot) throws IOException;
/**
* Executes this action; called by the Builder when all of this Action's inputs have been
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
index d48da8f6dc..9898b658a7 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.io.FileOutErr;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -118,6 +119,10 @@ public class ActionExecutionContext implements Closeable {
return metadataHandler;
}
+ public FileSystem getFileSystem() {
+ return executor.getFileSystem();
+ }
+
public Path getExecRoot() {
return executor.getExecRoot();
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Executor.java b/src/main/java/com/google/devtools/build/lib/actions/Executor.java
index 673c7bedae..292e78fcf5 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Executor.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Executor.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.actions;
import com.google.common.eventbus.EventBus;
import com.google.devtools.build.lib.clock.Clock;
import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.common.options.OptionsClassProvider;
@@ -36,6 +37,10 @@ import com.google.devtools.common.options.OptionsClassProvider;
* they both provide services to actions being executed and are passed to almost the same places.
*/
public interface Executor {
+
+ /** Returns the file system of blaze. */
+ FileSystem getFileSystem();
+
/**
* Returns the execution root. This is the directory underneath which Blaze builds its entire
* output working tree, including the source symlink forest. All build actions are executed
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
index 60071469f5..ac4a005e0a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
@@ -22,7 +22,6 @@ import com.google.devtools.build.lib.skyframe.serialization.PathCodec;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs;
import com.google.devtools.build.lib.util.StringCanonicalizer;
-import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.CodedOutputStream;
@@ -90,14 +89,6 @@ public final class BlazeDirectories {
this.localOutputPath = outputBase.getRelative(relativeOutputPath);
}
- /**
- * Returns the Filesystem that all of our directories belong to. Handy for
- * resolving absolute paths.
- */
- public FileSystem getFileSystem() {
- return serverDirectories.getFileSystem();
- }
-
public ServerDirectories getServerDirectories() {
return serverDirectories;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
index 48a05c9a9a..27cf1dddc8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
@@ -21,7 +21,6 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.PathCodec;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
import com.google.devtools.build.lib.util.Preconditions;
-import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.CodedOutputStream;
@@ -69,14 +68,6 @@ public final class ServerDirectories {
}
/**
- * Returns the Filesystem that all of our directories belong to. Handy for
- * resolving absolute paths.
- */
- public FileSystem getFileSystem() {
- return installBase.getFileSystem();
- }
-
- /**
* Returns the installation base directory. Currently used by info command only.
*/
public Path getInstallBase() {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
index a3525e5501..e7eb515698 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
@@ -40,6 +40,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.LoggingUtil;
import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -349,13 +350,13 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
/**
* Deletes <b>all</b> possible test outputs.
*
- * TestRunnerAction potentially can create many more non-declared outputs - xml output,
- * coverage data file and logs for failed attempts. All those outputs are uniquely
- * identified by the test log base name with arbitrary prefix and extension.
+ * <p>TestRunnerAction potentially can create many more non-declared outputs - xml output,
+ * coverage data file and logs for failed attempts. All those outputs are uniquely identified by
+ * the test log base name with arbitrary prefix and extension.
*/
@Override
- protected void deleteOutputs(Path execRoot) throws IOException {
- super.deleteOutputs(execRoot);
+ protected void deleteOutputs(FileSystem fileSystem, Path execRoot) throws IOException {
+ super.deleteOutputs(fileSystem, execRoot);
// We do not rely on globs, as it causes quadratic behavior in --runs_per_test and test
// shard count.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
index e84cd647e4..0ff341fa27 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
@@ -170,7 +170,7 @@ public class BazelRepositoryModule extends BlazeModule {
clientEnvironmentSupplier,
directories));
builder.addSkyFunction(MavenServerFunction.NAME, new MavenServerFunction(directories));
- filesystem = directories.getFileSystem();
+ filesystem = runtime.getFileSystem();
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
index 3bdb6d48ed..e1df684cfc 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
@@ -51,6 +51,7 @@ import com.google.devtools.build.lib.shell.CommandResult;
import com.google.devtools.build.lib.util.CommandBuilder;
import com.google.devtools.build.lib.util.NetUtil;
import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -170,11 +171,11 @@ public class BazelWorkspaceStatusModule extends BlazeModule {
}
@Override
- public void prepare(Path execRoot) throws IOException {
+ public void prepare(FileSystem fileSystem, Path execRoot) throws IOException {
// The default implementation of this method deletes all output files; override it to keep
// the old stableStatus around. This way we can reuse the existing file (preserving its mtime)
// if the contents haven't changed.
- deleteOutput(volatileStatus);
+ deleteOutput(fileSystem, volatileStatus);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index 241084782e..e07656c919 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -229,7 +229,7 @@ public class ExecutionTool {
// client.
cache =
new SingleBuildFileCache(
- env.getExecRoot().getPathString(), env.getDirectories().getFileSystem());
+ env.getExecRoot().getPathString(), env.getRuntime().getFileSystem());
}
this.fileCache = cache;
this.prefetcher = builder.getActionInputPrefetcher();
@@ -302,6 +302,7 @@ public class ExecutionTool {
private BlazeExecutor createExecutor()
throws ExecutorInitException {
return new BlazeExecutor(
+ runtime.getFileSystem(),
env.getExecRoot(),
getReporter(),
env.getEventBus(),
diff --git a/src/main/java/com/google/devtools/build/lib/exec/BlazeExecutor.java b/src/main/java/com/google/devtools/build/lib/exec/BlazeExecutor.java
index 134bd7660c..8b43388150 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/BlazeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/BlazeExecutor.java
@@ -29,6 +29,7 @@ import com.google.devtools.build.lib.events.Reporter;
import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.common.options.OptionsClassProvider;
import java.util.HashMap;
@@ -54,6 +55,7 @@ public final class BlazeExecutor implements Executor {
private final boolean verboseFailures;
private final boolean showSubcommands;
+ private final FileSystem fileSystem;
private final Path execRoot;
private final Reporter reporter;
private final EventBus eventBus;
@@ -77,6 +79,7 @@ public final class BlazeExecutor implements Executor {
* shutdown() when you're done with this executor.
*/
public BlazeExecutor(
+ FileSystem fileSystem,
Path execRoot,
Reporter reporter,
EventBus eventBus,
@@ -89,6 +92,7 @@ public final class BlazeExecutor implements Executor {
ExecutionOptions executionOptions = options.getOptions(ExecutionOptions.class);
this.verboseFailures = executionOptions.verboseFailures;
this.showSubcommands = executionOptions.showSubcommands;
+ this.fileSystem = fileSystem;
this.execRoot = execRoot;
this.reporter = reporter;
this.eventBus = eventBus;
@@ -141,6 +145,11 @@ public final class BlazeExecutor implements Executor {
}
@Override
+ public FileSystem getFileSystem() {
+ return fileSystem;
+ }
+
+ @Override
public Path getExecRoot() {
return execRoot;
}
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
index 4a503e44ba..72f1fe1413 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerModule.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.runtime.BlazeModule;
import com.google.devtools.build.lib.runtime.BlazeRuntime;
import com.google.devtools.build.lib.runtime.WorkspaceBuilder;
import com.google.devtools.build.lib.syntax.Callstack;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.common.options.OptionsProvider;
import java.util.UUID;
@@ -57,6 +58,7 @@ public class AllocationTrackerModule extends BlazeModule {
OptionsProvider startupOptions,
BlazeVersionInfo versionInfo,
UUID instanceId,
+ FileSystem fileSystem,
ServerDirectories directories,
Clock clock) {
String memoryTrackerPropery = System.getProperty("RULE_MEMORY_TRACKER");
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD b/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
index e4d909f0bc..01f77455e2 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/profiler/memory/BUILD
@@ -19,6 +19,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:runtime",
"//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib:util",
+ "//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/common/options",
"//third_party:guava",
"//third_party/allocation_instrumenter",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 3d93900fa6..947db2268f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -420,8 +420,8 @@ public class CppCompileAction extends AbstractAction
/**
* Returns the list of additional inputs found by dependency discovery, during action preparation,
- * and clears the stored list. {@link #prepare} must be called before this method is called, on
- * each action execution.
+ * and clears the stored list. {@link Action#prepare} must be called before this method is called,
+ * on each action execution.
*/
public Iterable<Artifact> getAdditionalInputs() {
Iterable<Artifact> result = Preconditions.checkNotNull(additionalInputs);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java
index c0da518642..4ef967709c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java
@@ -26,6 +26,7 @@ import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.util.Fingerprint;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.Symlinks;
@@ -54,11 +55,11 @@ public final class CreateIncSymlinkAction extends AbstractAction {
}
@Override
- public void prepare(Path execRoot) throws IOException {
+ public void prepare(FileSystem fileSystem, Path execRoot) throws IOException {
if (includePath.isDirectory(Symlinks.NOFOLLOW)) {
FileSystemUtils.deleteTree(includePath);
}
- super.prepare(execRoot);
+ super.prepare(fileSystem, execRoot);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java
index 26b0276488..2c014f917b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
/**
@@ -59,7 +60,7 @@ public final class FdoStubAction extends AbstractAction {
}
@Override
- public void prepare(Path execRoot) {
+ public void prepare(FileSystem fileSystem, Path execRoot) {
// The superclass would delete the output files here. We can't let that happen, since this
// action does not in fact create those files; it is only a placeholder and the actual files
// are created *before* the execution phase in FdoSupport.extractFdoZip()
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
index 01aeaf1757..683a5243f4 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
@@ -85,21 +85,25 @@ public abstract class BlazeModule {
}
/**
- * Called when Bazel starts up after {@link #getStartupOptions}, {@link #globalInit}, and
- * {@link #getFileSystem}.
+ * Called when Bazel starts up after {@link #getStartupOptions}, {@link #globalInit}, and {@link
+ * #getFileSystem}.
*
* @param startupOptions the server's startup options
* @param versionInfo the Bazel version currently running
* @param instanceId the id of the current Bazel server
+ * @param fileSystem
* @param directories the install directory
* @param clock the clock
- *
* @throws AbruptExitException to shut down the server immediately
*/
- public void blazeStartup(OptionsProvider startupOptions,
- BlazeVersionInfo versionInfo, UUID instanceId, ServerDirectories directories,
- Clock clock) throws AbruptExitException {
- }
+ public void blazeStartup(
+ OptionsProvider startupOptions,
+ BlazeVersionInfo versionInfo,
+ UUID instanceId,
+ FileSystem fileSystem,
+ ServerDirectories directories,
+ Clock clock)
+ throws AbruptExitException {}
/**
* Called to initialize a new server ({@link BlazeRuntime}). Modules can override this method to
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 29b9e45650..8eb5ffbb47 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -122,6 +122,7 @@ public final class BlazeRuntime {
private static final Logger logger = Logger.getLogger(BlazeRuntime.class.getName());
+ private final FileSystem fileSystem;
private final Iterable<BlazeModule> blazeModules;
private final Map<String, BlazeCommand> commandMap = new LinkedHashMap<>();
private final Clock clock;
@@ -153,6 +154,7 @@ public final class BlazeRuntime {
private BlazeWorkspace workspace;
private BlazeRuntime(
+ FileSystem fileSystem,
QueryEnvironmentFactory queryEnvironmentFactory,
ImmutableList<QueryFunction> queryFunctions,
ImmutableList<OutputFormatter> queryOutputFormatters,
@@ -171,6 +173,7 @@ public final class BlazeRuntime {
String productName,
PathConverter pathToUriConverter) {
// Server state
+ this.fileSystem = fileSystem;
this.blazeModules = blazeModules;
overrideCommands(commands);
@@ -283,6 +286,10 @@ public final class BlazeRuntime {
return false;
}
+ public FileSystem getFileSystem() {
+ return fileSystem;
+ }
+
public BlazeWorkspace getWorkspace() {
return workspace;
}
@@ -959,18 +966,21 @@ public final class BlazeRuntime {
ServerDirectories serverDirectories =
new ServerDirectories(installBasePath, outputBasePath, startupOptions.installMD5);
Clock clock = BlazeClock.instance();
- BlazeRuntime.Builder runtimeBuilder = new BlazeRuntime.Builder()
- .setProductName(productName)
- .setServerDirectories(serverDirectories)
- .setStartupOptionsProvider(options)
- .setClock(clock)
- .setAbruptShutdownHandler(abruptShutdownHandler)
- // TODO(bazel-team): Make BugReportingExceptionHandler the default.
- // See bug "Make exceptions in EventBus subscribers fatal"
- .setEventBusExceptionHandler(
- startupOptions.fatalEventBusExceptions || !BlazeVersionInfo.instance().isReleasedBlaze()
- ? new BlazeRuntime.BugReportingExceptionHandler()
- : new BlazeRuntime.RemoteExceptionHandler());
+ BlazeRuntime.Builder runtimeBuilder =
+ new BlazeRuntime.Builder()
+ .setProductName(productName)
+ .setFileSystem(fs)
+ .setServerDirectories(serverDirectories)
+ .setStartupOptionsProvider(options)
+ .setClock(clock)
+ .setAbruptShutdownHandler(abruptShutdownHandler)
+ // TODO(bazel-team): Make BugReportingExceptionHandler the default.
+ // See bug "Make exceptions in EventBus subscribers fatal"
+ .setEventBusExceptionHandler(
+ startupOptions.fatalEventBusExceptions
+ || !BlazeVersionInfo.instance().isReleasedBlaze()
+ ? new BlazeRuntime.BugReportingExceptionHandler()
+ : new BlazeRuntime.RemoteExceptionHandler());
if (System.getenv("TEST_TMPDIR") != null
&& System.getenv("NO_CRASH_ON_LOGGING_IN_TEST") == null) {
@@ -1103,6 +1113,7 @@ public final class BlazeRuntime {
* an exception. Please plan appropriately.
*/
public static class Builder {
+ private FileSystem fileSystem;
private ServerDirectories serverDirectories;
private Clock clock;
private Runnable abruptShutdownHandler;
@@ -1122,8 +1133,13 @@ public final class BlazeRuntime {
Preconditions.checkNotNull(clock);
for (BlazeModule module : blazeModules) {
- module.blazeStartup(startupOptionsProvider,
- BlazeVersionInfo.instance(), instanceId, serverDirectories, clock);
+ module.blazeStartup(
+ startupOptionsProvider,
+ BlazeVersionInfo.instance(),
+ instanceId,
+ fileSystem,
+ serverDirectories,
+ clock);
}
ServerBuilder serverBuilder = new ServerBuilder();
serverBuilder.addQueryOutputFormatters(OutputFormatter.getDefaultFormatters());
@@ -1142,7 +1158,7 @@ public final class BlazeRuntime {
Package.Builder.Helper packageBuilderHelper = null;
for (BlazeModule module : blazeModules) {
Package.Builder.Helper candidateHelper =
- module.getPackageBuilderHelper(ruleClassProvider, serverDirectories.getFileSystem());
+ module.getPackageBuilderHelper(ruleClassProvider, fileSystem);
if (candidateHelper != null) {
Preconditions.checkState(packageBuilderHelper == null,
"more than one module defines a package builder helper");
@@ -1173,6 +1189,7 @@ public final class BlazeRuntime {
}
return new BlazeRuntime(
+ fileSystem,
serverBuilder.getQueryEnvironmentFactory(),
serverBuilder.getQueryFunctions(),
serverBuilder.getQueryOutputFormatters(),
@@ -1197,6 +1214,11 @@ public final class BlazeRuntime {
return this;
}
+ public Builder setFileSystem(FileSystem fileSystem) {
+ this.fileSystem = fileSystem;
+ return this;
+ }
+
public Builder setServerDirectories(ServerDirectories serverDirectories) {
this.serverDirectories = serverDirectories;
return this;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
index 6329ee1a05..a36f3afaba 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
@@ -612,7 +612,7 @@ public final class CommandEnvironment {
if (inWorkspace()) {
workingDirectory = workspace.getRelative(commonOptions.clientCwd);
} else {
- workspace = FileSystemUtils.getWorkingDirectory(getDirectories().getFileSystem());
+ workspace = FileSystemUtils.getWorkingDirectory(getRuntime().getFileSystem());
workingDirectory = workspace;
}
this.relativeWorkingDirectory = workingDirectory.relativeTo(workspace);
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java b/src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java
index 882f6f03e2..6b9266702b 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java
@@ -78,6 +78,7 @@ public final class WorkspaceBuilder {
SkyframeExecutor skyframeExecutor =
skyframeExecutorFactory.create(
packageFactory,
+ runtime.getFileSystem(),
directories,
workspaceStatusActionFactory,
ruleClassProvider.getBuildInfoFactories(),
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
index cbfdb5e277..0badadd258 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
@@ -498,7 +498,7 @@ public abstract class InfoItem {
return print("unknown");
}
// Tunnel through a Path object in order to normalize the representation of the path.
- Path javaHomePath = env.getDirectories().getFileSystem().getPath(javaHome);
+ Path javaHomePath = env.getRuntime().getFileSystem().getPath(javaHome);
return print(javaHomePath.getPathString());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java
index b538fed1c6..5fffec536e 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java
@@ -60,7 +60,7 @@ abstract class AbstractSandboxSpawnRunner implements SpawnRunner {
this.sandboxOptions = cmdEnv.getOptions().getOptions(SandboxOptions.class);
this.verboseFailures = cmdEnv.getOptions().getOptions(ExecutionOptions.class).verboseFailures;
this.inaccessiblePaths =
- sandboxOptions.getInaccessiblePaths(cmdEnv.getDirectories().getFileSystem());
+ sandboxOptions.getInaccessiblePaths(cmdEnv.getRuntime().getFileSystem());
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java
index cc3150db9f..7cc54c31a7 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java
@@ -105,7 +105,7 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
this.execRoot = cmdEnv.getExecRoot();
this.allowNetwork = SandboxHelpers.shouldAllowNetwork(cmdEnv.getOptions());
this.productName = productName;
- this.alwaysWritableDirs = getAlwaysWritableDirs(cmdEnv.getDirectories().getFileSystem());
+ this.alwaysWritableDirs = getAlwaysWritableDirs(cmdEnv.getRuntime().getFileSystem());
this.processWrapper = ProcessWrapperRunner.getProcessWrapper(cmdEnv);
this.localEnvProvider = new XCodeLocalEnvProvider();
this.timeoutGraceSeconds = timeoutGraceSeconds;
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java
index 4246735919..aee389713a 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java
@@ -81,6 +81,7 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
return execPath != null ? cmdEnv.getExecRoot().getRelative(execPath) : null;
}
+ private final FileSystem fileSystem;
private final BlazeDirectories blazeDirs;
private final Path execRoot;
private final boolean allowNetwork;
@@ -99,6 +100,7 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
Path inaccessibleHelperDir,
int timeoutGraceSeconds) {
super(cmdEnv, sandboxBase);
+ this.fileSystem = cmdEnv.getRuntime().getFileSystem();
this.blazeDirs = cmdEnv.getDirectories();
this.execRoot = cmdEnv.getExecRoot();
this.productName = productName;
@@ -242,14 +244,14 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
private ImmutableSet<Path> getTmpfsPaths() {
ImmutableSet.Builder<Path> tmpfsPaths = ImmutableSet.builder();
for (String tmpfsPath : getSandboxOptions().sandboxTmpfsPath) {
- tmpfsPaths.add(blazeDirs.getFileSystem().getPath(tmpfsPath));
+ tmpfsPaths.add(fileSystem.getPath(tmpfsPath));
}
return tmpfsPaths.build();
}
private SortedMap<Path, Path> getReadOnlyBindMounts(
BlazeDirectories blazeDirs, Path sandboxExecRoot) throws UserExecException {
- Path tmpPath = blazeDirs.getFileSystem().getPath("/tmp");
+ Path tmpPath = fileSystem.getPath("/tmp");
final SortedMap<Path, Path> bindMounts = Maps.newTreeMap();
if (blazeDirs.getWorkspace().startsWith(tmpPath)) {
bindMounts.put(blazeDirs.getWorkspace(), blazeDirs.getWorkspace());
@@ -260,7 +262,7 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
for (ImmutableMap.Entry<String, String> additionalMountPath :
getSandboxOptions().sandboxAdditionalMounts) {
try {
- final Path mountTarget = blazeDirs.getFileSystem().getPath(additionalMountPath.getValue());
+ final Path mountTarget = fileSystem.getPath(additionalMountPath.getValue());
// If source path is relative, treat it as a relative path inside the execution root
final Path mountSource = sandboxExecRoot.getRelative(additionalMountPath.getKey());
// If a target has more than one source path, the latter one will take effect.
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
index 5003b698d9..bdb1269c4b 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
@@ -48,7 +48,7 @@ public final class SandboxModule extends BlazeModule {
BlazeDirectories blazeDirs = cmdEnv.getDirectories();
String productName = cmdEnv.getRuntime().getProductName();
SandboxOptions sandboxOptions = request.getOptions(SandboxOptions.class);
- FileSystem fs = blazeDirs.getFileSystem();
+ FileSystem fs = cmdEnv.getRuntime().getFileSystem();
if (sandboxOptions.sandboxBase.isEmpty()) {
sandboxBase = blazeDirs.getOutputBase().getRelative(productName + "-sandbox");
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index fdddbd9192..364f9957b3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -58,6 +58,7 @@ import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.ResourceUsage;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.BatchStat;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -120,6 +121,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
private SequencedSkyframeExecutor(
EvaluatorSupplier evaluatorSupplier,
PackageFactory pkgFactory,
+ FileSystem fileSystem,
BlazeDirectories directories,
Factory workspaceStatusActionFactory,
ImmutableList<BuildInfoFactory> buildInfoFactories,
@@ -134,6 +136,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
super(
evaluatorSupplier,
pkgFactory,
+ fileSystem,
directories,
workspaceStatusActionFactory,
buildInfoFactories,
@@ -150,6 +153,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
public static SequencedSkyframeExecutor create(
PackageFactory pkgFactory,
+ FileSystem fileSystem,
BlazeDirectories directories,
Factory workspaceStatusActionFactory,
ImmutableList<BuildInfoFactory> buildInfoFactories,
@@ -165,6 +169,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
new SequencedSkyframeExecutor(
InMemoryMemoizingEvaluator.SUPPLIER,
pkgFactory,
+ fileSystem,
directories,
workspaceStatusActionFactory,
buildInfoFactories,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
index fe1706d3bf..0b645fb34b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Factory;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.packages.PackageFactory;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -32,6 +33,7 @@ public class SequencedSkyframeExecutorFactory implements SkyframeExecutorFactory
@Override
public SkyframeExecutor create(
PackageFactory pkgFactory,
+ FileSystem fileSystem,
BlazeDirectories directories,
Factory workspaceStatusActionFactory,
ImmutableList<BuildInfoFactory> buildInfoFactories,
@@ -41,6 +43,7 @@ public class SequencedSkyframeExecutorFactory implements SkyframeExecutorFactory
Iterable<SkyValueDirtinessChecker> customDirtinessCheckers) {
return SequencedSkyframeExecutor.create(
pkgFactory,
+ fileSystem,
directories,
workspaceStatusActionFactory,
buildInfoFactories,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
index 9b0f1a5dda..622f1c3c4a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
@@ -781,7 +781,7 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
// Delete the outputs before executing the action, just to ensure that
// the action really does produce the outputs.
try {
- action.prepare(context.getExecRoot());
+ action.prepare(context.getFileSystem(), context.getExecRoot());
createOutputDirectories(action);
} catch (IOException e) {
reportError("failed to delete output files before executing action", e, action, null);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 089fc65fdb..7145a1d23c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -184,6 +184,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
new MemoizingEvaluator.EmittedEventState();
private final PackageFactory pkgFactory;
private final WorkspaceStatusAction.Factory workspaceStatusActionFactory;
+ private final FileSystem fileSystem;
private final BlazeDirectories directories;
protected final ExternalFilesHelper externalFilesHelper;
@Nullable protected OutputService outputService;
@@ -290,6 +291,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
protected SkyframeExecutor(
EvaluatorSupplier evaluatorSupplier,
PackageFactory pkgFactory,
+ FileSystem fileSystem,
BlazeDirectories directories,
Factory workspaceStatusActionFactory,
ImmutableList<BuildInfoFactory> buildInfoFactories,
@@ -311,6 +313,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
syscalls, cyclesReporter, pkgLocator, numPackagesLoaded, this);
this.resourceManager = ResourceManager.instance();
this.skyframeActionExecutor = new SkyframeActionExecutor(eventBus, statusReporterRef);
+ this.fileSystem = fileSystem;
this.directories = Preconditions.checkNotNull(directories);
ImmutableMap.Builder<BuildInfoKey, BuildInfoFactory> factoryMapBuilder = ImmutableMap.builder();
for (BuildInfoFactory factory : buildInfoFactories) {
@@ -1840,7 +1843,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
@VisibleForTesting
public FileSystem getFileSystemForTesting() {
- return directories.getFileSystem();
+ return fileSystem;
}
@VisibleForTesting
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java
index cce86103ca..246c6831bd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Factory;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.util.AbruptExitException;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -35,6 +36,7 @@ public interface SkyframeExecutorFactory {
*
* @param tsgm timestamp granularity monitor
* @param pkgFactory the package factory
+ * @param fileSystem the Blaze file system
* @param directories Blaze directories
* @param workspaceStatusActionFactory a factory for creating WorkspaceStatusAction objects
* @param buildInfoFactories list of BuildInfoFactories
@@ -47,6 +49,7 @@ public interface SkyframeExecutorFactory {
*/
SkyframeExecutor create(
PackageFactory pkgFactory,
+ FileSystem fileSystem,
BlazeDirectories directories,
Factory workspaceStatusActionFactory,
ImmutableList<BuildInfoFactory> buildInfoFactories,
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Path.java b/src/main/java/com/google/devtools/build/lib/vfs/Path.java
index 81b7ac083f..132f6ea6ba 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/Path.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/Path.java
@@ -994,17 +994,23 @@ public class Path implements Comparable<Path>, Serializable {
return fileSystem.getFileSize(this, followSymlinks.toBoolean());
}
+ /** Please prefer to use {@link #delete(FileSystem)}. */
+ public boolean delete() throws IOException {
+ return fileSystem.delete(this);
+ }
+
/**
- * Deletes the file denoted by this path, not following symbolic links.
- * Returns normally iff the file doesn't exist after the call: true if this
- * call deleted the file, false if the file already didn't exist. Throws an
- * exception if the file could not be deleted for any reason.
+ * Deletes the file denoted by this path, not following symbolic links. Returns normally iff the
+ * file doesn't exist after the call: true if this call deleted the file, false if the file
+ * already didn't exist. Throws an exception if the file could not be deleted for any reason.
+ *
+ * <p>This is a migration method. The method (and its FileSystem-less counterpart) will be deleted
+ * once the FileSystem instance is removed from Path.
*
* @return true iff the file was actually deleted by this call
- * @throws IOException if the deletion failed but the file was present prior
- * to the call
+ * @throws IOException if the deletion failed but the file was present prior to the call
*/
- public boolean delete() throws IOException {
+ public boolean delete(FileSystem fileSystem) throws IOException {
return fileSystem.delete(this);
}