From 53c74768d26089f49a4eea5bf52fefa0108f5198 Mon Sep 17 00:00:00 2001 From: janakr Date: Mon, 26 Feb 2018 11:35:15 -0800 Subject: @AutoCodec WriteBuildInfoPropertiesAction. PiperOrigin-RevId: 187054284 --- .../build/lib/rules/java/JavaBuildInfoFactory.java | 25 ++++++++++------- .../rules/java/WriteBuildInfoPropertiesAction.java | 31 +++++++++++----------- 2 files changed, 31 insertions(+), 25 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib') 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 c37214686d..cd93f1145a 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 @@ -23,6 +23,8 @@ 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; import com.google.devtools.build.lib.rules.java.WriteBuildInfoPropertiesAction.TimestampFormatter; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; import com.google.devtools.build.lib.vfs.PathFragment; import java.time.Instant; import java.time.ZoneOffset; @@ -48,16 +50,19 @@ public abstract class JavaBuildInfoFactory implements BuildInfoFactory { DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss yyyy"); // A default formatter that returns a date in UTC format. - private static final TimestampFormatter DEFAULT_FORMATTER = - new TimestampFormatter() { - @Override - public String format(long timestamp) { - return Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.UTC).format(DEFAULT_TIME_FORMAT) - + " (" - + timestamp / 1000 - + ')'; - } - }; + @AutoCodec + @VisibleForSerialization + static class DefaultTimestampFormatter implements TimestampFormatter { + @Override + public String format(long timestamp) { + return Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.UTC).format(DEFAULT_TIME_FORMAT) + + " (" + + timestamp / 1000 + + ')'; + } + } + + private static final TimestampFormatter DEFAULT_FORMATTER = new DefaultTimestampFormatter(); @Override public final BuildInfoCollection create(BuildInfoContext context, BuildConfiguration config, diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java index 4c2da18970..96b68017d5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java @@ -18,7 +18,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Strings; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionKeyContext; @@ -45,7 +44,6 @@ import java.util.Properties; public class WriteBuildInfoPropertiesAction extends AbstractFileWriteAction { private static final String GUID = "19e543c2-3ce4-4aef-80f5-4f8abf4b064f"; - private final ImmutableList valueArtifacts; private final BuildInfoPropertiesTranslator keyTranslations; private final boolean includeVolatile; private final boolean includeNonVolatile; @@ -111,29 +109,32 @@ public class WriteBuildInfoPropertiesAction extends AbstractFileWriteAction { *

It reads the set of build info keys from an action context that is usually contributed to * Blaze by the workspace status module, and the value associated with said keys from the * workspace status files (stable and volatile) written by the workspace status action. The files - * generated by this action serve as input to the - * {@link com.google.devtools.build.singlejar.SingleJar} program. + * generated by this action serve as input to the {@link + * com.google.devtools.build.singlejar.SingleJar} program. * *

Without input artifacts, this action uses redacted build information. * * @param inputs Artifacts that contain build information, or an empty collection to use redacted - * build information - * @param output output the properties file Artifact created by this action - * @param keyTranslations how to translates available keys. See - * {@link BuildInfoPropertiesTranslator}. + * build information + * @param primaryOutput output the properties file Artifact created by this action + * @param keyTranslations how to translates available keys. See {@link + * BuildInfoPropertiesTranslator}. * @param includeVolatile whether the set of key to write are giving volatile keys or not * @param includeNonVolatile whether the set of key to write are giving non-volatile keys or not * @param timestampFormatter formats dates printed in the properties file */ - public WriteBuildInfoPropertiesAction(Collection inputs, Artifact output, - BuildInfoPropertiesTranslator keyTranslations, boolean includeVolatile, - boolean includeNonVolatile, TimestampFormatter timestampFormatter) { - super(ActionOwner.SYSTEM_ACTION_OWNER, inputs, output, /* makeExecutable= */ false); + public WriteBuildInfoPropertiesAction( + Collection inputs, + Artifact primaryOutput, + BuildInfoPropertiesTranslator keyTranslations, + boolean includeVolatile, + boolean includeNonVolatile, + TimestampFormatter timestampFormatter) { + super(ActionOwner.SYSTEM_ACTION_OWNER, inputs, primaryOutput, /* makeExecutable= */ false); this.keyTranslations = keyTranslations; this.includeVolatile = includeVolatile; this.includeNonVolatile = includeNonVolatile; this.timestampFormatter = timestampFormatter; - valueArtifacts = ImmutableList.copyOf(inputs); if (!inputs.isEmpty()) { // With non-empty inputs we should not generate both volatile and non-volatile data @@ -141,7 +142,7 @@ public class WriteBuildInfoPropertiesAction extends AbstractFileWriteAction { Preconditions.checkState(includeVolatile ^ includeNonVolatile); } Preconditions.checkState( - output.isConstantMetadata() == (includeVolatile && !inputs.isEmpty())); + primaryOutput.isConstantMetadata() == (includeVolatile && !inputs.isEmpty())); } @Override @@ -152,7 +153,7 @@ public class WriteBuildInfoPropertiesAction extends AbstractFileWriteAction { public void writeOutputFile(OutputStream out) throws IOException { WorkspaceStatusAction.Context context = ctx.getContext(WorkspaceStatusAction.Context.class); Map values = new LinkedHashMap<>(); - for (Artifact valueFile : valueArtifacts) { + for (Artifact valueFile : getInputs()) { values.putAll(WorkspaceStatusAction.parseValues(valueFile.getPath())); } -- cgit v1.2.3