diff options
author | 2015-10-20 08:46:38 +0000 | |
---|---|---|
committer | 2015-10-20 16:37:56 +0000 | |
commit | c585530e1acb3ccf9f249e45663704aaba6f6a51 (patch) | |
tree | 0c41fc32ab1716e1d93f6febaf15de0f858e0700 /src | |
parent | 42a13678fb62cfd32755fca002a36814b2064e8a (diff) |
Move workingDirectory to CommandEnvironment.
Preparation for running multiple commands in parallel.
--
MOS_MIGRATED_REVID=105840167
Diffstat (limited to 'src')
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; } |