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
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 29b9e45..8eb5ffb 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 @@
 
   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 @@
   private BlazeWorkspace workspace;
 
   private BlazeRuntime(
+      FileSystem fileSystem,
       QueryEnvironmentFactory queryEnvironmentFactory,
       ImmutableList<QueryFunction> queryFunctions,
       ImmutableList<OutputFormatter> queryOutputFormatters,
@@ -171,6 +173,7 @@
       String productName,
       PathConverter pathToUriConverter) {
     // Server state
+    this.fileSystem = fileSystem;
     this.blazeModules = blazeModules;
     overrideCommands(commands);
 
@@ -283,6 +286,10 @@
     return false;
   }
 
+  public FileSystem getFileSystem() {
+    return fileSystem;
+  }
+
   public BlazeWorkspace getWorkspace() {
     return workspace;
   }
@@ -959,18 +966,21 @@
     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 @@
    * 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 @@
       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 @@
       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 @@
       }
 
       return new BlazeRuntime(
+          fileSystem,
           serverBuilder.getQueryEnvironmentFactory(),
           serverBuilder.getQueryFunctions(),
           serverBuilder.getQueryOutputFormatters(),
@@ -1197,6 +1214,11 @@
       return this;
     }
 
+    public Builder setFileSystem(FileSystem fileSystem) {
+      this.fileSystem = fileSystem;
+      return this;
+    }
+
     public Builder setServerDirectories(ServerDirectories serverDirectories) {
       this.serverDirectories = serverDirectories;
       return this;