aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Kristina Chodorow <kchodorow@google.com>2017-03-03 14:06:45 +0000
committerGravatar Yue Gan <yueg@google.com>2017-03-06 09:44:22 +0000
commit0ca44769ea775485aac177664a13d4e178fa037b (patch)
tree3f860ad53e3ba6e4bf66f49f15adc335108c1799 /src/main/java/com
parent6935ad673a9d1ee88945191c210dc80edfe02d84 (diff)
Pass the repository name through to build info factories
I was fixing the Android tests and I noticed that the bazel_workspace_status_test was failing. It was like when you have a thread coming out of a sweater and you start pulling and pretty soon you have no sweater. Long story short, my "Android tests fix" cl ended up needing ~1k more lines changed (on top of the existing enormous CL). So, I'm creating some smaller CLs with the changes that I can extract from the mega CL. Again. Prep for #1681. -- PiperOrigin-RevId: 149106039 MOS_MIGRATED_REVID=149106039
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoFactory.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBuildInfoFactory.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java14
6 files changed, 46 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoFactory.java
index 2a4b4caf1f..07e991818e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoFactory.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.analysis.buildinfo;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Root;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.Serializable;
@@ -29,7 +30,7 @@ public interface BuildInfoFactory extends Serializable {
/**
* Type of the build-data artifact.
*/
- public enum BuildInfoType {
+ enum BuildInfoType {
/**
* Ignore changes to this file for the purposes of determining whether an action needs to be
* re-executed. I.e., the action is only re-executed if at least one other input has changed.
@@ -45,7 +46,7 @@ public interface BuildInfoFactory extends Serializable {
/**
* Context for the creation of build-info artifacts.
*/
- public interface BuildInfoContext {
+ interface BuildInfoContext {
Artifact getBuildInfoArtifact(PathFragment rootRelativePath, Root root, BuildInfoType type);
}
@@ -53,7 +54,7 @@ public interface BuildInfoFactory extends Serializable {
* Build-info key for lookup from the {@link
* com.google.devtools.build.lib.analysis.AnalysisEnvironment}.
*/
- public static final class BuildInfoKey implements Serializable {
+ final class BuildInfoKey implements Serializable {
private final String name;
public BuildInfoKey(String name) {
@@ -83,7 +84,7 @@ public interface BuildInfoFactory extends Serializable {
* Create actions and artifacts for language-specific build-info files.
*/
BuildInfoCollection create(BuildInfoContext context, BuildConfiguration config,
- Artifact buildInfo, Artifact buildChangelist);
+ Artifact buildInfo, Artifact buildChangelist, RepositoryName repositoryName);
/**
* Returns the key for the information created by this factory.
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
index ba0f6b407b..ae1fe70270 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
@@ -119,6 +119,18 @@ public final class RepositoryName implements Serializable {
}
/**
+ * Creates a RepositoryName from a known-valid string (not @-prefixed). Generally this is a
+ * directory that has been created via getSourceRoot() or getPathUnderExecRoot().
+ */
+ public static RepositoryName createFromValidStrippedName(String name) {
+ try {
+ return repositoryNameCache.get("@" + name);
+ } catch (ExecutionException e) {
+ throw new IllegalArgumentException(e.getMessage());
+ }
+ }
+
+ /**
* Extracts the repository name from a PathFragment that was created with
* {@code PackageIdentifier.getSourceRoot}.
*
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java
index 71be3461fd..30a5515b3e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java
@@ -44,19 +44,19 @@ public final class CppBuildInfo implements BuildInfoFactory {
@Override
public BuildInfoCollection create(BuildInfoContext buildInfoContext, BuildConfiguration config,
- Artifact buildInfo, Artifact buildChangelist) {
+ Artifact buildInfo, Artifact buildChangelist, RepositoryName repositoryName) {
List<Action> actions = new ArrayList<>();
WriteBuildInfoHeaderAction redactedInfo = getHeader(buildInfoContext, config,
BUILD_INFO_REDACTED_HEADER_NAME,
- Artifact.NO_ARTIFACTS, true, true);
+ Artifact.NO_ARTIFACTS, true, true, repositoryName);
WriteBuildInfoHeaderAction nonvolatileInfo = getHeader(buildInfoContext, config,
BUILD_INFO_NONVOLATILE_HEADER_NAME,
ImmutableList.of(buildInfo),
- false, true);
+ false, true, repositoryName);
WriteBuildInfoHeaderAction volatileInfo = getHeader(buildInfoContext, config,
BUILD_INFO_VOLATILE_HEADER_NAME,
ImmutableList.of(buildChangelist),
- true, false);
+ true, false, repositoryName);
actions.add(redactedInfo);
actions.add(nonvolatileInfo);
actions.add(volatileInfo);
@@ -68,8 +68,8 @@ public final class CppBuildInfo implements BuildInfoFactory {
private WriteBuildInfoHeaderAction getHeader(BuildInfoContext buildInfoContext,
BuildConfiguration config, PathFragment headerName,
Collection<Artifact> inputs,
- boolean writeVolatileInfo, boolean writeNonVolatileInfo) {
- Root outputPath = config.getIncludeDirectory(RepositoryName.MAIN);
+ boolean writeVolatileInfo, boolean writeNonVolatileInfo, RepositoryName repositoryName) {
+ Root outputPath = config.getIncludeDirectory(repositoryName);
final Artifact header =
buildInfoContext.getBuildInfoArtifact(headerName, outputPath,
writeVolatileInfo && !inputs.isEmpty()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java
index 3ab7bde2b5..95e1cc5a5d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java
@@ -59,28 +59,31 @@ public abstract class JavaBuildInfoFactory implements BuildInfoFactory {
@Override
public final BuildInfoCollection create(BuildInfoContext context, BuildConfiguration config,
- Artifact stableStatus, Artifact volatileStatus) {
+ Artifact stableStatus, Artifact volatileStatus, RepositoryName repositoryName) {
WriteBuildInfoPropertiesAction redactedInfo = getHeader(context,
config,
BUILD_INFO_REDACTED_PROPERTIES_NAME,
Artifact.NO_ARTIFACTS,
createRedactedTranslator(),
true,
- true);
+ true,
+ repositoryName);
WriteBuildInfoPropertiesAction nonvolatileInfo = getHeader(context,
config,
BUILD_INFO_NONVOLATILE_PROPERTIES_NAME,
ImmutableList.of(stableStatus),
createNonVolatileTranslator(),
false,
- true);
+ true,
+ repositoryName);
WriteBuildInfoPropertiesAction volatileInfo = getHeader(context,
config,
BUILD_INFO_VOLATILE_PROPERTIES_NAME,
ImmutableList.of(volatileStatus),
createVolatileTranslator(),
true,
- false);
+ false,
+ repositoryName);
List<Action> actions = new ArrayList<>(3);
actions.add(redactedInfo);
actions.add(nonvolatileInfo);
@@ -119,8 +122,9 @@ public abstract class JavaBuildInfoFactory implements BuildInfoFactory {
ImmutableList<Artifact> inputs,
BuildInfoPropertiesTranslator translator,
boolean includeVolatile,
- boolean includeNonVolatile) {
- Root outputPath = config.getIncludeDirectory(RepositoryName.MAIN);
+ boolean includeNonVolatile,
+ RepositoryName repositoryName) {
+ Root outputPath = config.getIncludeDirectory(repositoryName);
final Artifact output = context.getBuildInfoArtifact(propertyFileName, outputPath,
includeVolatile && !inputs.isEmpty() ? BuildInfoType.NO_REBUILD
: BuildInfoType.FORCE_REBUILD_IF_CHANGED);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBuildInfoFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBuildInfoFactory.java
index 032b9009cf..4397dd9ef8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBuildInfoFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBuildInfoFactory.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoCollection;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
/**
* Objc build info creation - passes on BuildInfo output file for consumption from Objc rules.
@@ -33,7 +34,7 @@ public class ObjcBuildInfoFactory implements BuildInfoFactory {
*/
@Override
public BuildInfoCollection create(BuildInfoContext context, BuildConfiguration config,
- Artifact buildInfo, Artifact buildChangelist) {
+ Artifact buildInfo, Artifact buildChangelist, RepositoryName repositoryName) {
return new BuildInfoCollection(
ImmutableList.<Action>of(),
ImmutableList.of(buildInfo),
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 652fc820e4..1d5d2b36c5 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
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoContext;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoType;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.skyframe.BuildInfoCollectionValue.BuildInfoKeyAndConfig;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -54,6 +55,13 @@ public class BuildInfoCollectionFunction implements SkyFunction {
if (buildInfoFactories == null) {
return null;
}
+ WorkspaceNameValue nameValue = (WorkspaceNameValue) env.getValue(WorkspaceNameValue.key());
+ if (nameValue == null) {
+ return null;
+ }
+ RepositoryName repositoryName = RepositoryName.createFromValidStrippedName(
+ nameValue.maybeGetName());
+
final ArtifactFactory factory = artifactFactory.get();
BuildInfoContext context = new BuildInfoContext() {
@Override
@@ -65,9 +73,9 @@ public class BuildInfoCollectionFunction implements SkyFunction {
}
};
- return new BuildInfoCollectionValue(buildInfoFactories.get(
- keyAndConfig.getInfoKey()).create(context, keyAndConfig.getConfig(),
- infoArtifactValue.getStableArtifact(), infoArtifactValue.getVolatileArtifact()));
+ return new BuildInfoCollectionValue(buildInfoFactories.get(keyAndConfig.getInfoKey()).create(
+ context, keyAndConfig.getConfig(), infoArtifactValue.getStableArtifact(),
+ infoArtifactValue.getVolatileArtifact(), repositoryName));
}
@Override