aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xscripts/bootstrap/compile.sh1
-rw-r--r--src/main/cpp/blaze.cc2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java32
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java17
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java4
36 files changed, 101 insertions, 53 deletions
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index 3fbd6333a8..665165c705 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -333,6 +333,7 @@ function run_bazel_jar() {
--batch \
--install_base=${ARCHIVE_DIR} \
--output_base=${OUTPUT_DIR}/out \
+ --output_user_root=${OUTPUT_DIR}/user_root \
--install_md5= \
--workspace_directory="$(get_cwd)" \
--nofatal_event_bus_exceptions \
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index 7035472d94..0b6ec47b9e 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -494,6 +494,8 @@ static vector<string> GetArgumentArray(
result.push_back("--connect_timeout_secs=" +
ToString(globals->options->connect_timeout_secs));
+ result.push_back("--output_user_root=" +
+ blaze::ConvertPath(globals->options->output_user_root));
result.push_back("--install_base=" +
blaze::ConvertPath(globals->options->install_base));
result.push_back("--install_md5=" + globals->install_md5);
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 0e34cf3067..9b25f7a997 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
@@ -26,17 +26,16 @@ import java.util.Objects;
import javax.annotation.Nullable;
/**
- * Represents the server install directory, which contains the Bazel installation and embedded
- * binaries.
- *
- * <p>The <code>installBase</code> is the directory where the Blaze binary has been installed. The
- * <code>outputBase</code> is the directory below which Blaze puts all its state.
+ * Represents the relevant directories for the server: the location of the embedded binaries
+ * and the output directories.
*/
@AutoCodec
@Immutable
public final class ServerDirectories {
public static final ObjectCodec<ServerDirectories> CODEC = new ServerDirectories_AutoCodec();
+ /** Top-level user output directory; used, e.g., as default location for caches. */
+ private final Path outputUserRoot;
/** Where Blaze gets unpacked. */
private final Path installBase;
/** The content hash of everything in installBase. */
@@ -44,22 +43,25 @@ public final class ServerDirectories {
/** The root of the temp and output trees. */
private final Path outputBase;
- public ServerDirectories(Path installBase, Path outputBase, @Nullable String installMD5) {
+ public ServerDirectories(
+ Path installBase, Path outputBase, Path outputUserRoot, @Nullable String installMD5) {
this(
installBase,
outputBase,
+ outputUserRoot,
Strings.isNullOrEmpty(installMD5) ? null : checkMD5(HashCode.fromString(installMD5)));
}
@AutoCodec.Instantiator
- ServerDirectories(Path installBase, Path outputBase, HashCode installMD5) {
+ ServerDirectories(Path installBase, Path outputBase, Path outputUserRoot, HashCode installMD5) {
+ this.outputUserRoot = outputUserRoot;
this.installBase = installBase;
this.outputBase = outputBase;
this.installMD5 = installMD5;
}
- public ServerDirectories(Path installBase, Path outputBase) {
- this(installBase, outputBase, (HashCode) null);
+ public ServerDirectories(Path installBase, Path outputBase, Path outputUserRoot) {
+ this(installBase, outputBase, outputUserRoot, (HashCode) null);
}
private static HashCode checkMD5(HashCode hash) {
@@ -81,6 +83,13 @@ public final class ServerDirectories {
return outputBase;
}
+ /**
+ * Returns the root directory for user output. In particular default caches will be located here.
+ */
+ public Path getOutputUserRoot() {
+ return outputUserRoot;
+ }
+
/** Returns the installed embedded binaries directory, under the shared installBase location. */
public Path getEmbeddedBinariesRoot() {
return installBase.getChild("_embedded_binaries");
@@ -96,7 +105,7 @@ public final class ServerDirectories {
@Override
public int hashCode() {
- return Objects.hash(installBase, installMD5, outputBase);
+ return Objects.hash(installBase, installMD5, outputBase, outputUserRoot);
}
@Override
@@ -110,6 +119,7 @@ public final class ServerDirectories {
ServerDirectories that = (ServerDirectories) obj;
return this.installBase.equals(that.installBase)
&& Objects.equals(this.installMD5, that.installMD5)
- && this.outputBase.equals(that.outputBase);
+ && this.outputBase.equals(that.outputBase)
+ && this.outputUserRoot.equals(that.outputUserRoot);
}
}
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 a27b9b6078..df1692fdd5 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
@@ -977,17 +977,22 @@ public final class BlazeRuntime {
String productName = startupOptions.productName.toLowerCase(Locale.US);
PathFragment workspaceDirectory = startupOptions.workspaceDirectory;
+ PathFragment outputUserRoot = startupOptions.outputUserRoot;
PathFragment installBase = startupOptions.installBase;
PathFragment outputBase = startupOptions.outputBase;
maybeForceJNIByGettingPid(installBase); // Must be before first use of JNI.
- // From the point of view of the Java program --install_base and --output_base
- // are mandatory options, despite the comment in their declarations.
+ // From the point of view of the Java program --install_base, --output_base, and
+ // --output_user_root are mandatory options, despite the comment in their declarations.
if (installBase == null || !installBase.isAbsolute()) { // (includes "" default case)
throw new IllegalArgumentException(
"Bad --install_base option specified: '" + installBase + "'");
}
+ if (outputUserRoot != null && !outputUserRoot.isAbsolute()) { // (includes "" default case)
+ throw new IllegalArgumentException(
+ "Bad --output_user_root option specified: '" + outputUserRoot + "'");
+ }
if (outputBase != null && !outputBase.isAbsolute()) { // (includes "" default case)
throw new IllegalArgumentException(
"Bad --output_base option specified: '" + outputBase + "'");
@@ -1009,6 +1014,7 @@ public final class BlazeRuntime {
Path.setFileSystemForSerialization(fs);
SubprocessBuilder.setSubprocessFactory(subprocessFactoryImplementation());
+ Path outputUserRootPath = fs.getPath(outputUserRoot);
Path installBasePath = fs.getPath(installBase);
Path outputBasePath = fs.getPath(outputBase);
Path workspaceDirectoryPath = null;
@@ -1017,7 +1023,8 @@ public final class BlazeRuntime {
}
ServerDirectories serverDirectories =
- new ServerDirectories(installBasePath, outputBasePath, startupOptions.installMD5);
+ new ServerDirectories(
+ installBasePath, outputBasePath, outputUserRootPath, startupOptions.installMD5);
Clock clock = BlazeClock.instance();
BlazeRuntime.Builder runtimeBuilder =
new BlazeRuntime.Builder()
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
index 8cccbacbfe..e8eafbc667 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
@@ -128,10 +128,6 @@ public class BlazeServerStartupOptions extends OptionsBase {
)
public PathFragment outputBase;
- /* Note: This option is only used by the C++ client, never by the Java server.
- * It is included here to make sure that the option is documented in the help
- * output, which is auto-generated by Java code.
- */
@Option(
name = "output_user_root",
defaultValue = "null", // NOTE: purely decorative! See class docstring.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index 850687dcc1..5613c87ab1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -143,7 +143,8 @@ public abstract class AbstractPackageLoader implements PackageLoader {
// TODO(nharmata): Refactor WorkspaceFileFunction to make this a non-issue.
Path devNull = workspaceDir.getFileSystem().getPath("/dev/null");
directories =
- new BlazeDirectories(new ServerDirectories(devNull, devNull), workspaceDir, "blaze");
+ new BlazeDirectories(
+ new ServerDirectories(devNull, devNull, devNull), workspaceDir, "blaze");
}
public Builder setRuleClassProvider(RuleClassProvider ruleClassProvider) {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java
index 06ffcd07ae..930a2a5730 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java
@@ -33,20 +33,24 @@ public class BlazeDirectoriesTest extends FoundationTestCase {
FileSystem fs = scratch.getFileSystem();
Path installBase = fs.getPath("/my/install");
Path outputBase = fs.getPath("/my/output");
+ Path userRoot = fs.getPath("/home/user/root");
Path workspace = fs.getPath("/my/ws");
BlazeDirectories directories =
- new BlazeDirectories(new ServerDirectories(installBase, outputBase), workspace, "foo");
+ new BlazeDirectories(
+ new ServerDirectories(installBase, outputBase, userRoot), workspace, "foo");
assertThat(outputBase.getRelative("execroot/ws")).isEqualTo(directories.getExecRoot());
workspace = null;
directories =
- new BlazeDirectories(new ServerDirectories(installBase, outputBase), workspace, "foo");
+ new BlazeDirectories(
+ new ServerDirectories(installBase, outputBase, userRoot), workspace, "foo");
assertThat(outputBase.getRelative("execroot/" + BlazeDirectories.DEFAULT_EXEC_ROOT))
.isEqualTo(directories.getExecRoot());
workspace = fs.getPath("/");
directories =
- new BlazeDirectories(new ServerDirectories(installBase, outputBase), workspace, "foo");
+ new BlazeDirectories(
+ new ServerDirectories(installBase, outputBase, userRoot), workspace, "foo");
assertThat(outputBase.getRelative("execroot/" + BlazeDirectories.DEFAULT_EXEC_ROOT))
.isEqualTo(directories.getExecRoot());
}
@@ -58,20 +62,23 @@ public class BlazeDirectoriesTest extends FoundationTestCase {
new BlazeDirectories(
new ServerDirectories(
FsUtils.TEST_FILESYSTEM.getPath("/install_base"),
- FsUtils.TEST_FILESYSTEM.getPath("/output_base")),
+ FsUtils.TEST_FILESYSTEM.getPath("/output_base"),
+ FsUtils.TEST_FILESYSTEM.getPath("/user_root")),
FsUtils.TEST_FILESYSTEM.getPath("/workspace"),
"Blaze"),
new BlazeDirectories(
new ServerDirectories(
FsUtils.TEST_FILESYSTEM.getPath("/install_base"),
FsUtils.TEST_FILESYSTEM.getPath("/output_base"),
+ FsUtils.TEST_FILESYSTEM.getPath("/user_root"),
"1234abcd1234abcd1234abcd1234abcd"),
FsUtils.TEST_FILESYSTEM.getPath("/workspace"),
"Blaze"),
new BlazeDirectories(
new ServerDirectories(
FsUtils.TEST_FILESYSTEM.getPath("/install_base"),
- FsUtils.TEST_FILESYSTEM.getPath("/output_base")),
+ FsUtils.TEST_FILESYSTEM.getPath("/output_base"),
+ FsUtils.TEST_FILESYSTEM.getPath("/user_root")),
FsUtils.TEST_FILESYSTEM.getPath("/workspace"),
"Bazel"))
.addDependency(FileSystem.class, FsUtils.TEST_FILESYSTEM)
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java
index c38437b99a..470909c5b5 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java
@@ -71,7 +71,10 @@ public class TemplateExpansionActionTest extends FoundationTestCase {
substitutions.add(Substitution.of("%value%", "bar"));
directories =
new BlazeDirectories(
- new ServerDirectories(scratch.resolve("/install"), scratch.resolve("/base")),
+ new ServerDirectories(
+ scratch.resolve("/install"),
+ scratch.resolve("/base"),
+ scratch.resolve("/userRoot")),
scratch.resolve("/workspace"),
"mock-product-name");
binTools = BinTools.empty(directories);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
index 279675f12c..6e1c0634a7 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
@@ -154,7 +154,7 @@ public abstract class AnalysisTestCase extends FoundationTestCase {
BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY);
directories =
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase),
+ new ServerDirectories(outputBase, outputBase, outputBase),
rootDirectory,
analysisMock.getProductName());
workspaceStatusActionFactory =
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index b749ec40f2..e3f69f50d6 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -208,7 +208,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase {
analysisMock = getAnalysisMock();
directories =
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase),
+ new ServerDirectories(outputBase, outputBase, outputBase),
rootDirectory,
analysisMock.getProductName());
actionKeyContext = new ActionKeyContext();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
index b7dd9ba6e4..ab725a9223 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
@@ -106,7 +106,7 @@ public abstract class ConfigurationTestCase extends FoundationTestCase {
final PackageFactory pkgFactory;
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase),
+ new ServerDirectories(outputBase, outputBase, outputBase),
rootDirectory,
analysisMock.getProductName());
pkgFactory =
diff --git a/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
index f520cc484f..ec724b2c0c 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
@@ -50,7 +50,10 @@ public class BlazeExecutorTest {
fileSystem = new InMemoryFileSystem();
directories =
new BlazeDirectories(
- new ServerDirectories(fileSystem.getPath("/install"), fileSystem.getPath("/base")),
+ new ServerDirectories(
+ fileSystem.getPath("/install"),
+ fileSystem.getPath("/base"),
+ fileSystem.getPath("/root")),
fileSystem.getPath("/workspace"),
"mock-product-name");
binTools = BinTools.empty(directories);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
index eb35dd61bc..90578ed361 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
@@ -92,7 +92,7 @@ public abstract class PackageLoadingTestCase extends FoundationTestCase {
}
directories =
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase),
+ new ServerDirectories(outputBase, outputBase, outputBase),
rootDirectory,
loadingMock.getProductName());
packageFactory =
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
index aaf0c5f9b3..1f3354e8ce 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
@@ -75,7 +75,7 @@ public class BuildFileModificationTest extends FoundationTestCase {
ruleClassProvider = analysisMock.createRuleClassProvider();
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase),
+ new ServerDirectories(outputBase, outputBase, outputBase),
rootDirectory,
analysisMock.getProductName());
skyframeExecutor =
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
index d4373b4f5e..569230190c 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
@@ -466,7 +466,8 @@ public class IncrementalLoadingTest {
LoadingMock loadingMock = LoadingMock.get();
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(fs.getPath("/install"), fs.getPath("/output")),
+ new ServerDirectories(
+ fs.getPath("/install"), fs.getPath("/output"), fs.getPath("/userRoot")),
workspace,
loadingMock.getProductName());
skyframeExecutor =
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
index 6814b89f4a..cf7c61bba0 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
@@ -661,7 +661,8 @@ public class LoadingPhaseRunnerTest {
analysisMock.setupMockClient(mockToolsConfig);
directories =
new BlazeDirectories(
- new ServerDirectories(fs.getPath("/install"), fs.getPath("/output")),
+ new ServerDirectories(
+ fs.getPath("/install"), fs.getPath("/output"), fs.getPath("/userRoot")),
workspace,
analysisMock.getProductName());
FileSystemUtils.deleteTree(workspace.getRelative("base"));
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
index 9134e4df79..b934efe85e 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
@@ -81,7 +81,7 @@ public class PackageCacheTest extends FoundationTestCase {
ruleClassProvider = analysisMock.createRuleClassProvider();
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase),
+ new ServerDirectories(outputBase, outputBase, outputBase),
rootDirectory,
analysisMock.getProductName());
PackageFactory.BuilderForTesting packageFactoryBuilder =
diff --git a/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java b/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java
index 02df4c6621..44808dee10 100644
--- a/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java
+++ b/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java
@@ -93,7 +93,7 @@ public class ExternalPackageUtilTest extends BuildViewTestCase {
new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(rootDirectory, outputBase),
+ new ServerDirectories(rootDirectory, outputBase, rootDirectory),
rootDirectory,
analysisMock.getProductName());
ExternalFilesHelper externalFilesHelper =
diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
index 0547078341..f3ab343655 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
@@ -75,7 +75,8 @@ public class RepositoryDelegatorTest extends FoundationTestCase {
public void setupDelegator() throws Exception {
Path root = scratch.dir("/outputbase");
BlazeDirectories directories =
- new BlazeDirectories(new ServerDirectories(root, root), root, TestConstants.PRODUCT_NAME);
+ new BlazeDirectories(
+ new ServerDirectories(root, root, root), root, TestConstants.PRODUCT_NAME);
delegatorFunction =
new RepositoryDelegatorFunction(
ImmutableMap.of(), null, new AtomicBoolean(true), ImmutableMap::of, directories);
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
index 0d9e7ba8fd..32a0879040 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
@@ -132,7 +132,10 @@ public class BlazeCommandDispatcherRcoptionsTest {
public final void initializeRuntime() throws Exception {
String productName = TestConstants.PRODUCT_NAME;
ServerDirectories serverDirectories =
- new ServerDirectories(scratch.dir("install_base"), scratch.dir("output_base"));
+ new ServerDirectories(
+ scratch.dir("install_base"),
+ scratch.dir("output_base"),
+ scratch.dir("user_output_root"));
this.runtime =
new BlazeRuntime.Builder()
.setFileSystem(scratch.getFileSystem())
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
index ab601c2f05..2efebed15d 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
@@ -64,7 +64,8 @@ public class BlazeOptionHandlerTest {
parser.setAllowResidue(true);
String productName = TestConstants.PRODUCT_NAME;
ServerDirectories serverDirectories =
- new ServerDirectories(scratch.dir("install_base"), scratch.dir("output_base"));
+ new ServerDirectories(
+ scratch.dir("install_base"), scratch.dir("output_base"), scratch.dir("user_root"));
this.runtime =
new BlazeRuntime.Builder()
.setFileSystem(scratch.getFileSystem())
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
index 023ce8475a..3c0af6c31c 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
@@ -627,7 +627,9 @@ public class BuildEventStreamerTest extends FoundationTestCase {
BuildConfiguration configuration =
new BuildConfiguration(
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase), rootDirectory, "productName"),
+ new ServerDirectories(outputBase, outputBase, outputBase),
+ rootDirectory,
+ "productName"),
ImmutableMap
.<Class<? extends BuildConfiguration.Fragment>, BuildConfiguration.Fragment>of(),
BuildOptions.of(
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
index adf8a56775..de38e15cec 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
@@ -348,7 +348,8 @@ public final class CommandInterruptionTest {
isTestShuttingDown = new AtomicBoolean(false);
String productName = TestConstants.PRODUCT_NAME;
ServerDirectories serverDirectories =
- new ServerDirectories(scratch.dir("install"), scratch.dir("output"));
+ new ServerDirectories(
+ scratch.dir("install"), scratch.dir("output"), scratch.dir("user_root"));
BlazeRuntime runtime =
new BlazeRuntime.Builder()
.setFileSystem(scratch.getFileSystem())
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java b/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java
index 7c0006caaa..4a45e7d10f 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java
@@ -79,7 +79,8 @@ public class CleanCommandRecommendsAsyncTest {
String productName = TestConstants.PRODUCT_NAME;
Scratch scratch = new Scratch();
ServerDirectories serverDirectories =
- new ServerDirectories(scratch.dir("install"), scratch.dir("output"));
+ new ServerDirectories(
+ scratch.dir("install"), scratch.dir("output"), scratch.dir("user_root"));
BlazeRuntime runtime =
new BlazeRuntime.Builder()
.setFileSystem(scratch.getFileSystem())
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
index 036becfdf0..3b83fa89cf 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
@@ -77,7 +77,8 @@ abstract class ArtifactFunctionTestCase {
ImmutableList.of(Root.fromPath(root)),
BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
BlazeDirectories directories =
- new BlazeDirectories(new ServerDirectories(root, root), root, TestConstants.PRODUCT_NAME);
+ new BlazeDirectories(
+ new ServerDirectories(root, root, root), root, TestConstants.PRODUCT_NAME);
ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
pkgLocator,
ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS,
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
index b6933600d0..7563137a58 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
@@ -83,7 +83,7 @@ public class ContainingPackageLookupFunctionTest extends FoundationTestCase {
deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(rootDirectory, outputBase),
+ new ServerDirectories(rootDirectory, outputBase, outputBase),
rootDirectory,
analysisMock.getProductName());
ExternalFilesHelper externalFilesHelper =
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
index c78eab0e2c..6a8543fd55 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
@@ -129,7 +129,7 @@ public class FileFunctionTest {
AtomicReference<PathPackageLocator> pkgLocatorRef = new AtomicReference<>(pkgLocator);
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(pkgRoot.asPath(), outputBase),
+ new ServerDirectories(pkgRoot.asPath(), outputBase, outputBase),
pkgRoot.asPath(),
TestConstants.PRODUCT_NAME);
ExternalFilesHelper externalFilesHelper =
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
index 6fb3cd8f7a..bd1a1a0ba2 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
@@ -94,7 +94,7 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
pkgLocator,
ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS,
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase),
+ new ServerDirectories(outputBase, outputBase, outputBase),
rootDirectory,
TestConstants.PRODUCT_NAME));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
index af372aea05..27a8fd02bf 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
@@ -109,7 +109,7 @@ public class FilesystemValueCheckerTest {
BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(pkgRoot, pkgRoot), pkgRoot, TestConstants.PRODUCT_NAME);
+ new ServerDirectories(pkgRoot, pkgRoot, pkgRoot), pkgRoot, TestConstants.PRODUCT_NAME);
ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
pkgLocator, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, directories);
skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
index 546ef61bc2..02d5a0e901 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
@@ -132,7 +132,8 @@ public abstract class GlobFunctionTest {
AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages =
new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
BlazeDirectories directories =
- new BlazeDirectories(new ServerDirectories(root, root), root, TestConstants.PRODUCT_NAME);
+ new BlazeDirectories(
+ new ServerDirectories(root, root, root), root, TestConstants.PRODUCT_NAME);
ExternalFilesHelper externalFilesHelper =
ExternalFilesHelper.createForTesting(
pkgLocator,
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
index e2c8bb566d..b6eec17ee3 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
@@ -75,7 +75,7 @@ public class LocalRepositoryLookupFunctionTest extends FoundationTestCase {
deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(rootDirectory, outputBase),
+ new ServerDirectories(rootDirectory, outputBase, rootDirectory),
rootDirectory,
analysisMock.getProductName());
ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
index cccb3ab81d..0613eed6c9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
@@ -100,7 +100,7 @@ public abstract class PackageLookupFunctionTest extends FoundationTestCase {
deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(rootDirectory, outputBase),
+ new ServerDirectories(rootDirectory, outputBase, rootDirectory),
rootDirectory,
analysisMock.getProductName());
ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
index fa745c6320..4c56419cc6 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
@@ -67,7 +67,10 @@ public class PrepareDepsOfPatternsFunctionSmartNegationTest extends FoundationTe
public void setUp() throws Exception {
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(getScratch().dir("/install"), getScratch().dir("/output")),
+ new ServerDirectories(
+ getScratch().dir("/install"),
+ getScratch().dir("/output"),
+ getScratch().dir("/user_root")),
rootDirectory,
AnalysisMock.get().getProductName());
skyframeExecutor =
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
index ce40ea777f..0da51f8f50 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
@@ -101,7 +101,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(rootDirectory, outputBase),
+ new ServerDirectories(rootDirectory, outputBase, rootDirectory),
rootDirectory,
analysisMock.getProductName());
ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index d2aca56fe9..6fc7684371 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -169,7 +169,7 @@ public abstract class TimestampBuilderTestCase extends FoundationTestCase {
AtomicReference<TimestampGranularityMonitor> tsgmRef = new AtomicReference<>(tsgm);
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(rootDirectory, outputBase),
+ new ServerDirectories(rootDirectory, outputBase, outputBase),
rootDirectory,
TestConstants.PRODUCT_NAME);
ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
diff --git a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
index d2502f8023..37fd18833c 100644
--- a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
@@ -110,7 +110,9 @@ public class StandaloneSpawnStrategyTest {
BlazeDirectories directories =
new BlazeDirectories(
- new ServerDirectories(outputBase, outputBase), workspaceDir, "mock-product-name");
+ new ServerDirectories(outputBase, outputBase, outputBase),
+ workspaceDir,
+ "mock-product-name");
// This call implicitly symlinks the integration bin tools into the exec root.
IntegrationMock.get()
.getIntegrationBinTools(fileSystem, directories, TestConstants.WORKSPACE_NAME);