aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2017-04-04 13:53:14 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-04-04 18:38:24 +0200
commitc4134802dd15d6ef5cca6521f6bf6aac395ee2ad (patch)
treebcb3f28c5a4357f0089c2c71b738d63a748ef788 /src/main/java/com/google/devtools/build/lib/skyframe
parent64f80799ed5c6369ffb6814f939a7964b0fa7c49 (diff)
Automated g4 rollback of commit 1d9e1ac90197b1d3d7b137ba3c1ada67bb9ba31b.
*** Reason for rollback *** Breaks //src/test/shell/integration:force_delete_output_test *** Original change description *** 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: 152126545
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameFunction.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java17
6 files changed, 34 insertions, 44 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
index 71c5f0ac2c..3f18f8502b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
@@ -53,12 +53,6 @@ public class BuildConfigurationFunction implements SkyFunction {
@Override
public SkyValue compute(SkyKey skyKey, Environment env)
throws InterruptedException, BuildConfigurationFunctionException {
- WorkspaceNameValue workspaceNameValue = (WorkspaceNameValue) env
- .getValue(WorkspaceNameValue.key());
- if (workspaceNameValue == null) {
- return null;
- }
-
BuildConfigurationValue.Key key = (BuildConfigurationValue.Key) skyKey.argument();
Set<Fragment> fragments;
try {
@@ -76,7 +70,7 @@ public class BuildConfigurationFunction implements SkyFunction {
}
BuildConfiguration config = new BuildConfiguration(directories, fragmentsMap,
- key.getBuildOptions(), !key.actionsEnabled(), workspaceNameValue.getName());
+ key.getBuildOptions(), !key.actionsEnabled());
// Unlike static configurations, dynamic configurations don't need to embed transition logic
// within the configuration itself. However we still use this interface to provide a mapping
// between Transition types (e.g. HOST) and the dynamic transitions that apply those
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
index 79011a82a9..4e91031903 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
@@ -64,7 +64,7 @@ public class BuildInfoCollectionFunction implements SkyFunction {
return null;
}
RepositoryName repositoryName = RepositoryName.createFromValidStrippedName(
- nameValue.getName());
+ nameValue.maybeGetName());
final ArtifactFactory factory = artifactFactory.get();
BuildInfoContext context = new BuildInfoContext() {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java
index 3c252f8886..7326fb1855 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java
@@ -55,17 +55,11 @@ public class ConfigurationCollectionFunction implements SkyFunction {
@Override
public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException,
ConfigurationCollectionFunctionException {
- WorkspaceNameValue workspaceNameValue = (WorkspaceNameValue) env
- .getValue(WorkspaceNameValue.key());
- if (workspaceNameValue == null) {
- return null;
- }
ConfigurationCollectionKey collectionKey = (ConfigurationCollectionKey) skyKey.argument();
try {
BuildConfigurationCollection result = getConfigurations(env,
new SkyframePackageLoaderWithValueEnvironment(env, ruleClassProvider),
- collectionKey.getBuildOptions(), collectionKey.getMultiCpu(),
- workspaceNameValue.getName());
+ collectionKey.getBuildOptions(), collectionKey.getMultiCpu());
// BuildConfigurationCollection can be created, but dependencies to some files might be
// missing. In that case we need to build configurationCollection again.
@@ -84,8 +78,7 @@ public class ConfigurationCollectionFunction implements SkyFunction {
Environment env,
PackageProviderForConfigurations loadedPackageProvider,
BuildOptions buildOptions,
- ImmutableSet<String> multiCpu,
- String repositoryName)
+ ImmutableSet<String> multiCpu)
throws InvalidConfigurationException, InterruptedException {
// We cache all the related configurations for this target configuration in a cache that is
// dropped at the end of this method call. We instead rely on the cache for entire collections
@@ -98,7 +91,7 @@ public class ConfigurationCollectionFunction implements SkyFunction {
if (!multiCpu.isEmpty()) {
for (String cpu : multiCpu) {
BuildConfiguration targetConfiguration = createConfiguration(
- cache, env.getListener(), loadedPackageProvider, buildOptions, cpu, repositoryName);
+ cache, env.getListener(), loadedPackageProvider, buildOptions, cpu);
if (targetConfiguration == null || targetConfigurations.contains(targetConfiguration)) {
continue;
}
@@ -109,7 +102,7 @@ public class ConfigurationCollectionFunction implements SkyFunction {
}
} else {
BuildConfiguration targetConfiguration = createConfiguration(
- cache, env.getListener(), loadedPackageProvider, buildOptions, null, repositoryName);
+ cache, env.getListener(), loadedPackageProvider, buildOptions, null);
if (targetConfiguration == null) {
return null;
}
@@ -165,8 +158,7 @@ public class ConfigurationCollectionFunction implements SkyFunction {
ExtendedEventHandler originalEventListener,
PackageProviderForConfigurations loadedPackageProvider,
BuildOptions buildOptions,
- String cpuOverride,
- String repositoryName)
+ String cpuOverride)
throws InvalidConfigurationException, InterruptedException {
ErrorSensingEventHandler eventHandler = new ErrorSensingEventHandler(originalEventListener);
if (cpuOverride != null) {
@@ -178,7 +170,7 @@ public class ConfigurationCollectionFunction implements SkyFunction {
}
BuildConfiguration targetConfig = configurationFactory.get().createConfigurations(
- cache, loadedPackageProvider, buildOptions, eventHandler, repositoryName);
+ cache, loadedPackageProvider, buildOptions, eventHandler);
if (targetConfig == null) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index 370c69f595..1941489a77 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -453,7 +453,13 @@ public class PackageFunction implements SkyFunction {
if (workspaceNameValue == null) {
return null;
}
- String workspaceName = workspaceNameValue.getName();
+ String workspaceName = workspaceNameValue.maybeGetName();
+ if (workspaceName == null) {
+ throw new PackageFunctionException(
+ new BuildFileContainsErrorsException(Label.EXTERNAL_PACKAGE_IDENTIFIER),
+ Transience.PERSISTENT);
+ }
+
RootedPath buildFileRootedPath = packageLookupValue.getRootedPath(packageId);
FileValue buildFileValue = null;
Path buildFilePath = buildFileRootedPath.asPath();
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 9284f5c2e9..f6dc151dfe 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,11 +14,9 @@
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;
@@ -26,24 +24,22 @@ import javax.annotation.Nullable;
/**
* {@link SkyFunction} for {@link WorkspaceNameValue}s.
*
- * <p>All errors (e.g. parsing errors or a symlink cycle encountered when consuming the WORKSPACE
- * file) result in a {@link NoSuchPackageException}.
+ * <p>All transitive errors (e.g. 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, WorkspaceNameFunctionException {
+ public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException {
SkyKey externalPackageKey = PackageValue.key(Label.EXTERNAL_PACKAGE_IDENTIFIER);
PackageValue externalPackageValue = (PackageValue) env.getValue(externalPackageKey);
if (externalPackageValue == null) {
return null;
}
Package externalPackage = externalPackageValue.getPackage();
- if (externalPackage.containsErrors()) {
- throw new WorkspaceNameFunctionException();
- }
- return WorkspaceNameValue.withName(externalPackage.getWorkspaceName());
+ return externalPackage.containsErrors()
+ ? WorkspaceNameValue.withError()
+ : WorkspaceNameValue.withName(externalPackage.getWorkspaceName());
}
@Override
@@ -51,11 +47,4 @@ 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);
- }
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
index bbcebba5f4..1fccf6d4da 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
@@ -17,6 +17,7 @@ import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.Objects;
+import javax.annotation.Nullable;
/**
* A value that solely represents the 'name' of a Bazel workspace, as defined in the WORKSPACE file.
@@ -29,17 +30,20 @@ import java.util.Objects;
public class WorkspaceNameValue implements SkyValue {
private static final SkyKey KEY =
SkyKey.create(SkyFunctions.WORKSPACE_NAME, DummyArgument.INSTANCE);
+ private static final WorkspaceNameValue ERROR = new WorkspaceNameValue(null);
+ @Nullable
private final String workspaceName;
- private WorkspaceNameValue(String workspaceName) {
+ private WorkspaceNameValue(@Nullable String workspaceName) {
this.workspaceName = workspaceName;
}
/**
- * Returns the name of the workspace.
+ * Returns the name of the workspace, or {@code null} if there was an error in the WORKSPACE file.
*/
- public String getName() {
+ @Nullable
+ public String maybeGetName() {
return workspaceName;
}
@@ -48,6 +52,11 @@ public class WorkspaceNameValue implements SkyValue {
return KEY;
}
+ /** Returns a {@link WorkspaceNameValue} for a workspace whose WORKSPACE file is in error. */
+ public static WorkspaceNameValue withError() {
+ return WorkspaceNameValue.ERROR;
+ }
+
/** Returns a {@link WorkspaceNameValue} for a workspace with the given name. */
public static WorkspaceNameValue withName(String workspaceName) {
return new WorkspaceNameValue(Preconditions.checkNotNull(workspaceName));
@@ -74,7 +83,7 @@ public class WorkspaceNameValue implements SkyValue {
/** Singleton class used as the {@link SkyKey#argument} for {@link WorkspaceNameValue#key}. */
public static final class DummyArgument {
- static final int HASHCODE = DummyArgument.class.getCanonicalName().hashCode();
+ public static final int HASHCODE = DummyArgument.class.getCanonicalName().hashCode();
public static final DummyArgument INSTANCE = new DummyArgument();
private DummyArgument() {