aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java
diff options
context:
space:
mode:
authorGravatar kchodorow <kchodorow@google.com>2017-03-30 16:45:03 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2017-03-31 17:09:07 +0200
commit1d9e1ac90197b1d3d7b137ba3c1ada67bb9ba31b (patch)
treee1fd678b5e641169c50762929b7641a17b4e147f /src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java
parentea6f209f88e4292f0af5b75ef6872e1902eaeccd (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.java23
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);
+ }
+ }
}