diff options
author | felly <felly@google.com> | 2018-08-10 08:36:40 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-10 08:38:04 -0700 |
commit | 9374ecf94ce44e8bc56e68678cb512abf4cf9ce2 (patch) | |
tree | 7ad91bd14bd961b2dbb908b7f762b55fa5f2eb8d /src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java | |
parent | 6300c7eb70622b55bbc5f73ec1ffe8116d55c9cd (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.java | 84 |
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; + } +} |