diff options
author | 2017-03-30 16:45:03 +0000 | |
---|---|---|
committer | 2017-03-31 17:09:07 +0200 | |
commit | 1d9e1ac90197b1d3d7b137ba3c1ada67bb9ba31b (patch) | |
tree | e1fd678b5e641169c50762929b7641a17b4e147f /src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java | |
parent | ea6f209f88e4292f0af5b75ef6872e1902eaeccd (diff) |
Symlink output directories to the correct directory name
If the workspace directory is /path/to/my/proj and the name in the WORKSPACE
file is "floop", this will symlink the output directories to
output_base/execroot/floop instead of output_base/execroot/proj.
More prep for #1262, fixes #1681.
PiperOrigin-RevId: 151712384
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java index f6dc151dfe..9284f5c2e9 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java @@ -14,9 +14,11 @@ package com.google.devtools.build.lib.skyframe; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException; import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.skyframe.SkyFunction; +import com.google.devtools.build.skyframe.SkyFunctionException; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import javax.annotation.Nullable; @@ -24,22 +26,24 @@ import javax.annotation.Nullable; /** * {@link SkyFunction} for {@link WorkspaceNameValue}s. * - * <p>All transitive errors (e.g. a symlink cycle encountered when consuming the WORKSPACE file) - * result in a {@link NoSuchPackageException}. + * <p>All errors (e.g. parsing errors or a symlink cycle encountered when consuming the WORKSPACE + * file) result in a {@link NoSuchPackageException}. */ public class WorkspaceNameFunction implements SkyFunction { @Override @Nullable - public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException { + public SkyValue compute(SkyKey skyKey, Environment env) + throws InterruptedException, WorkspaceNameFunctionException { SkyKey externalPackageKey = PackageValue.key(Label.EXTERNAL_PACKAGE_IDENTIFIER); PackageValue externalPackageValue = (PackageValue) env.getValue(externalPackageKey); if (externalPackageValue == null) { return null; } Package externalPackage = externalPackageValue.getPackage(); - return externalPackage.containsErrors() - ? WorkspaceNameValue.withError() - : WorkspaceNameValue.withName(externalPackage.getWorkspaceName()); + if (externalPackage.containsErrors()) { + throw new WorkspaceNameFunctionException(); + } + return WorkspaceNameValue.withName(externalPackage.getWorkspaceName()); } @Override @@ -47,4 +51,11 @@ public class WorkspaceNameFunction implements SkyFunction { public String extractTag(SkyKey skyKey) { return null; } + + private class WorkspaceNameFunctionException extends SkyFunctionException { + WorkspaceNameFunctionException() { + super(new BuildFileContainsErrorsException(Label.EXTERNAL_PACKAGE_IDENTIFIER), + Transience.PERSISTENT); + } + } } |