aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2015-10-20 08:46:38 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-10-20 16:37:56 +0000
commitc585530e1acb3ccf9f249e45663704aaba6f6a51 (patch)
tree0c41fc32ab1716e1d93f6febaf15de0f858e0700 /src
parent42a13678fb62cfd32755fca002a36814b2064e8a (diff)
Move workingDirectory to CommandEnvironment.
Preparation for running multiple commands in parallel. -- MOS_MIGRATED_REVID=105840167
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java38
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java12
5 files changed, 36 insertions, 47 deletions
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 d33434bd46..a3074e54f5 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
@@ -48,16 +48,13 @@ import com.google.devtools.build.lib.analysis.config.BinTools;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.ConfigurationFactory;
-import com.google.devtools.build.lib.analysis.config.DefaultsPackage;
import com.google.devtools.build.lib.events.Event;
-import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.OutputFilter;
import com.google.devtools.build.lib.events.Reporter;
import com.google.devtools.build.lib.exec.OutputService;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.Preprocessor;
import com.google.devtools.build.lib.packages.RuleClassProvider;
-import com.google.devtools.build.lib.pkgcache.PackageCacheOptions;
import com.google.devtools.build.lib.pkgcache.PackageManager;
import com.google.devtools.build.lib.profiler.AutoProfiler;
import com.google.devtools.build.lib.profiler.MemoryProfiler;
@@ -159,7 +156,6 @@ public final class BlazeRuntime {
private static final Logger LOG = Logger.getLogger(BlazeRuntime.class.getName());
private final BlazeDirectories directories;
- private Path workingDirectory;
private long commandStartTime;
@Nullable
@@ -207,7 +203,6 @@ public final class BlazeRuntime {
Iterable<BlazeCommand> commands) {
this.workspaceStatusActionFactory = workspaceStatusActionFactory;
this.directories = directories;
- this.workingDirectory = directories.getWorkspace();
this.reporter = reporter;
this.packageFactory = pkgFactory;
this.binTools = binTools;
@@ -422,25 +417,12 @@ public final class BlazeRuntime {
*
* <p>This is often the first entry on the {@code --package_path}, but not always.
* Callers should certainly not make this assumption. The Path returned may be null.
- *
- * @see #getWorkingDirectory()
*/
public Path getWorkspace() {
return directories.getWorkspace();
}
/**
- * Returns the working directory of the {@code blaze} client process.
- *
- * <p>This may be equal to {@code getWorkspace()}, or beneath it.
- *
- * @see #getWorkspace()
- */
- public Path getWorkingDirectory() {
- return workingDirectory;
- }
-
- /**
* Returns if the client passed a valid workspace to be used for the build.
*/
public boolean inWorkspace() {
@@ -656,6 +638,7 @@ public final class BlazeRuntime {
// Ensure that the working directory will be under the workspace directory.
Path workspace = getWorkspace();
+ Path workingDirectory;
if (inWorkspace()) {
workingDirectory = workspace.getRelative(options.clientCwd);
} else {
@@ -663,6 +646,7 @@ public final class BlazeRuntime {
workingDirectory = workspace;
}
env.getLoadingPhaseRunner().updatePatternEvaluator(workingDirectory.relativeTo(workspace));
+ env.setWorkingDirectory(workingDirectory);
env.updateClientEnv(options.clientEnv, options.ignoreClientEnv);
@@ -689,7 +673,7 @@ public final class BlazeRuntime {
}
if (options.memoryProfilePath != null) {
- Path memoryProfilePath = getWorkingDirectory().getRelative(options.memoryProfilePath);
+ Path memoryProfilePath = env.getWorkingDirectory().getRelative(options.memoryProfilePath);
try {
MemoryProfiler.instance().start(memoryProfilePath.getOutputStream());
} catch (IOException e) {
@@ -836,22 +820,6 @@ public final class BlazeRuntime {
return commandMap;
}
- /**
- * Initializes the package cache using the given options, and syncs the package cache. Also
- * injects a defaults package using the options for the {@link BuildConfiguration}.
- *
- * @see DefaultsPackage
- */
- public void setupPackageCache(EventHandler eventHandler, PackageCacheOptions packageCacheOptions,
- String defaultsPackageContents, UUID commandId)
- throws InterruptedException, AbruptExitException {
- if (!skyframeExecutor.hasIncrementalState()) {
- clearSkyframeRelevantCaches();
- }
- skyframeExecutor.sync(eventHandler, packageCacheOptions, getOutputBase(), getWorkingDirectory(),
- defaultsPackageContents, commandId);
- }
-
public void shutdown() {
for (BlazeModule module : blazeModules) {
module.blazeShutdown();
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 43e1d60e3c..732c942a6b 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
@@ -69,6 +69,7 @@ public final class CommandEnvironment {
private final BuildView view;
private String outputFileSystem;
+ private Path workingDirectory;
private AtomicReference<AbruptExitException> pendingException = new AtomicReference<>();
@@ -101,6 +102,10 @@ public final class CommandEnvironment {
runtime.getPackageFactory().getRuleClassNames());
this.view = new BuildView(runtime.getDirectories(), runtime.getRuleClassProvider(),
runtime.getSkyframeExecutor(), runtime.getCoverageReportActionFactory());
+
+ // TODO(ulfjack): We don't call beforeCommand() in tests, but rely on workingDirectory being set
+ // in setupPackageCache(). This leads to NPE if we don't set it here.
+ this.workingDirectory = runtime.getWorkspace();
}
public BlazeRuntime getRuntime() {
@@ -181,8 +186,15 @@ public final class CommandEnvironment {
return runtime.getSkyframeExecutor();
}
+ /**
+ * Returns the working directory of the {@code blaze} client process.
+ *
+ * <p>This may be equal to {@code BlazeRuntime#getWorkspace()}, or beneath it.
+ *
+ * @see BlazeRuntime#getWorkspace()
+ */
public Path getWorkingDirectory() {
- return runtime.getWorkingDirectory();
+ return workingDirectory;
}
public ActionCache getPersistentActionCache() throws IOException {
@@ -246,7 +258,12 @@ public final class CommandEnvironment {
*/
public void setupPackageCache(PackageCacheOptions packageCacheOptions,
String defaultsPackageContents) throws InterruptedException, AbruptExitException {
- runtime.setupPackageCache(reporter, packageCacheOptions, defaultsPackageContents, commandId);
+ SkyframeExecutor skyframeExecutor = getSkyframeExecutor();
+ if (!skyframeExecutor.hasIncrementalState()) {
+ skyframeExecutor.resetEvaluator();
+ }
+ skyframeExecutor.sync(reporter, packageCacheOptions, runtime.getOutputBase(),
+ getWorkingDirectory(), defaultsPackageContents, commandId);
}
public long getCommandStartTime() {
@@ -257,6 +274,10 @@ public final class CommandEnvironment {
this.outputFileSystem = outputFileSystem;
}
+ void setWorkingDirectory(Path workingDirectory) {
+ this.workingDirectory = workingDirectory;
+ }
+
public String getOutputFileSystem() {
return outputFileSystem;
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java
index 993798c373..9b2cc21bc2 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java
@@ -193,12 +193,12 @@ public final class ProfileCommand implements BlazeCommand {
if (opts.combine != null && opts.dumpMode == null) {
MultiProfileStatistics statistics =
new MultiProfileStatistics(
- runtime.getWorkingDirectory(),
+ env.getWorkingDirectory(),
runtime.getWorkspaceName(),
options.getResidue(),
getInfoListener(env),
opts.vfsStatsLimit > 0);
- Path outputFile = runtime.getWorkingDirectory().getRelative(opts.combine);
+ Path outputFile = env.getWorkingDirectory().getRelative(opts.combine);
try (PrintStream output =
new PrintStream(new BufferedOutputStream(outputFile.getOutputStream()))) {
if (opts.html) {
@@ -225,7 +225,7 @@ public final class ProfileCommand implements BlazeCommand {
}
} else {
for (String name : options.getResidue()) {
- Path profileFile = runtime.getWorkingDirectory().getRelative(name);
+ Path profileFile = env.getWorkingDirectory().getRelative(name);
try {
ProfileInfo info = ProfileInfo.loadProfileVerbosely(profileFile, getInfoListener(env));
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
index 44364c3b15..09b11bf119 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
@@ -69,7 +69,7 @@ public final class ProjectFileSupport {
optionsParser.getOptions(PackageCacheOptions.class).packagePath,
env.getReporter(),
runtime.getWorkspace(),
- runtime.getWorkingDirectory()).getPathEntries();
+ env.getWorkingDirectory()).getPathEntries();
ProjectFile projectFile = projectFileProvider.getProjectFile(packagePath, projectFilePath);
env.getReporter().handle(Event.info("Using " + projectFile.getName()));
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
index 0650b77e2a..f2aaf449bf 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
@@ -215,7 +215,7 @@ public class RunCommand implements BlazeCommand {
}
Path workingDir;
try {
- workingDir = ensureRunfilesBuilt(runtime, targetToRun);
+ workingDir = ensureRunfilesBuilt(env, targetToRun);
} catch (CommandException e) {
env.getReporter().handle(Event.error("Error creating runfiles: " + e.getMessage()));
return ExitCode.LOCAL_ENVIRONMENTAL_ERROR;
@@ -343,17 +343,17 @@ public class RunCommand implements BlazeCommand {
* @return the path of the runfiles directory.
* @throws CommandException
*/
- private Path ensureRunfilesBuilt(BlazeRuntime runtime, ConfiguredTarget target)
+ private Path ensureRunfilesBuilt(CommandEnvironment env, ConfiguredTarget target)
throws CommandException {
FilesToRunProvider provider = target.getProvider(FilesToRunProvider.class);
RunfilesSupport runfilesSupport = provider == null ? null : provider.getRunfilesSupport();
if (runfilesSupport == null) {
- return runtime.getWorkingDirectory();
+ return env.getWorkingDirectory();
}
Artifact manifest = runfilesSupport.getRunfilesManifest();
PathFragment runfilesDir = runfilesSupport.getRunfilesDirectoryExecPath();
- Path workingDir = runtime.getExecRoot()
+ Path workingDir = env.getRuntime().getExecRoot()
.getRelative(runfilesDir)
.getRelative(runfilesSupport.getRunfiles().getSuffix());
@@ -369,8 +369,8 @@ public class RunCommand implements BlazeCommand {
manifest.getExecPath(),
runfilesDir,
false);
- helper.createSymlinksUsingCommand(runtime.getExecRoot(), target.getConfiguration(),
- runtime.getBinTools());
+ helper.createSymlinksUsingCommand(env.getRuntime().getExecRoot(), target.getConfiguration(),
+ env.getRuntime().getBinTools());
return workingDir;
}