aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
diff options
context:
space:
mode:
authorGravatar felly <felly@google.com>2018-08-10 08:36:40 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-10 08:38:04 -0700
commit9374ecf94ce44e8bc56e68678cb512abf4cf9ce2 (patch)
tree7ad91bd14bd961b2dbb908b7f762b55fa5f2eb8d /src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
parent6300c7eb70622b55bbc5f73ec1ffe8116d55c9cd (diff)
Automated rollback of commit 39974a43abdd32e3a1acbc7da945b08da9983e4e.
*** Reason for rollback *** b/112458627 *** Original change description *** Allow skyframe-aware actions to pass partial results through ActionExecutionContext. Remove FilesetProvider. PiperOrigin-RevId: 208213955
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
new file mode 100644
index 0000000000..08dc1ac78e
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
@@ -0,0 +1,84 @@
+// Copyright 2014 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.analysis.configuredtargets;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.FilesetTraversalParams;
+import com.google.devtools.build.lib.analysis.TargetContext;
+import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.analysis.fileset.FilesetProvider;
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.packages.OutputFile;
+import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
+import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+
+/**
+ * A configured target for output files generated by {@code Fileset} rules. They are almost the same
+ * thing as output files except that they implement {@link FilesetProvider} so that {@code Fileset}
+ * can figure out the link tree behind them.
+ *
+ * <p>In an ideal world, this would not be needed: Filesets would depend on other Filesets and not
+ * their output directories. However, sometimes a Fileset depends on the output directory of another
+ * Fileset. Thus, we need this hack.
+ */
+@AutoCodec
+public final class FilesetOutputConfiguredTarget extends OutputFileConfiguredTarget
+ implements FilesetProvider {
+ private final ImmutableList<FilesetTraversalParams> filesetTraversals;
+
+ public FilesetOutputConfiguredTarget(
+ TargetContext targetContext,
+ OutputFile outputFile,
+ TransitiveInfoCollection generatingRule,
+ Artifact outputArtifact,
+ ImmutableList<FilesetTraversalParams> traversals) {
+ this(
+ targetContext.getLabel(),
+ targetContext.getConfigurationKey(),
+ targetContext.getVisibility(),
+ generatingRule,
+ outputArtifact,
+ traversals);
+ Preconditions.checkState(
+ outputFile.getLabel().equals(targetContext.getLabel()),
+ "mismatch: %s %s",
+ outputFile,
+ targetContext);
+ }
+
+ @AutoCodec.VisibleForSerialization
+ @AutoCodec.Instantiator
+ FilesetOutputConfiguredTarget(
+ Label label,
+ BuildConfigurationValue.Key configurationKey,
+ NestedSet<PackageGroupContents> visibility,
+ TransitiveInfoCollection generatingRule,
+ Artifact artifact,
+ ImmutableList<FilesetTraversalParams> traversals) {
+ super(label, configurationKey, visibility, artifact, generatingRule);
+ FilesetProvider provider = generatingRule.getProvider(FilesetProvider.class);
+ Preconditions.checkArgument(provider != null);
+ filesetTraversals = traversals;
+ }
+
+ @Override
+ public ImmutableList<FilesetTraversalParams> getTraversals() {
+ return filesetTraversals;
+ }
+}