aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar mjhalupka <mjhalupka@google.com>2018-02-23 11:11:20 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-23 11:13:31 -0800
commitd829236e9feee234fde3a4aed36e1349b7e9ee16 (patch)
tree5714779886376791014eda84cdb6f8cc438ba9cf /src
parent61aa6b7634394c7674d04da8206cf35f2aae976a (diff)
Apply @AutoCodec to ExecutableSymlinkAction and SymlinkAction.
AbstractAction had getPrimaryInput() and getPrimaryOutput() which is why arguments are renamed. PiperOrigin-RevId: 186795064
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java37
-rw-r--r--src/test/java/com/google/devtools/build/lib/BUILD2
-rw-r--r--src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java35
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java29
5 files changed, 91 insertions, 23 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java
index 74131b1295..1be6ad2ea1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java
@@ -20,17 +20,20 @@ import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.vfs.Path;
import java.io.IOException;
/**
- * Action to create an executable symbolic link. It includes additional
- * validation that symlink target is indeed an executable file.
+ * Action to create an executable symbolic link. It includes additional validation that symlink
+ * target is indeed an executable file.
*/
+@AutoCodec
public final class ExecutableSymlinkAction extends SymlinkAction {
- public ExecutableSymlinkAction(ActionOwner owner, Artifact input, Artifact output) {
- super(owner, input, output, "Symlinking " + owner.getLabel());
+ @AutoCodec.Instantiator
+ public ExecutableSymlinkAction(ActionOwner owner, Artifact primaryInput, Artifact primaryOutput) {
+ super(owner, primaryInput, primaryOutput, "Symlinking " + owner.getLabel());
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
index 645cd6f974..5a74e0b8b3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
@@ -24,23 +24,21 @@ import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
import javax.annotation.Nullable;
-/**
- * Action to create a symbolic link.
- */
+/** Action to create a symbolic link. */
+@AutoCodec
public class SymlinkAction extends AbstractAction {
-
private static final String GUID = "349675b5-437c-4da8-891a-7fb98fba6ab5";
/** Null when {@link #getPrimaryInput} is the target of the symlink. */
@Nullable private final PathFragment inputPath;
- private final Artifact output;
private final String progressMessage;
/**
@@ -57,27 +55,29 @@ public class SymlinkAction extends AbstractAction {
// become the sole and primary in their respective lists.
super(owner, ImmutableList.of(input), ImmutableList.of(output));
this.inputPath = null;
- this.output = Preconditions.checkNotNull(output);
this.progressMessage = progressMessage;
}
/**
- * Creates a new SymlinkAction instance, where the inputPath
- * may be different than that input artifact's path. This is
- * only useful when dealing with runfiles trees where
- * link target is a directory.
+ * Creates a new SymlinkAction instance, where the inputPath may be different than that input
+ * artifact's path. This is only useful when dealing with runfiles trees where link target is a
+ * directory.
*
* @param owner the action owner.
* @param inputPath the Path that will be the src of the symbolic link.
- * @param input the Artifact that is required to build the inputPath.
- * @param output the Artifact that will be created by executing this Action.
+ * @param primaryInput the Artifact that is required to build the inputPath.
+ * @param primaryOutput the Artifact that will be created by executing this Action.
* @param progressMessage the progress message.
*/
- public SymlinkAction(ActionOwner owner, PathFragment inputPath, Artifact input,
- Artifact output, String progressMessage) {
- super(owner, ImmutableList.of(input), ImmutableList.of(output));
- this.inputPath = Preconditions.checkNotNull(inputPath);
- this.output = Preconditions.checkNotNull(output);
+ @AutoCodec.Instantiator
+ public SymlinkAction(
+ ActionOwner owner,
+ PathFragment inputPath,
+ Artifact primaryInput,
+ Artifact primaryOutput,
+ String progressMessage) {
+ super(owner, ImmutableList.of(primaryInput), ImmutableList.of(primaryOutput));
+ this.inputPath = inputPath;
this.progressMessage = progressMessage;
}
@@ -96,7 +96,6 @@ public class SymlinkAction extends AbstractAction {
ActionOwner owner, PathFragment inputPath, Artifact output, String progressMessage) {
super(owner, Artifact.NO_ARTIFACTS, ImmutableList.of(output));
this.inputPath = Preconditions.checkNotNull(inputPath);
- this.output = Preconditions.checkNotNull(output);
this.progressMessage = progressMessage;
}
@@ -105,7 +104,7 @@ public class SymlinkAction extends AbstractAction {
}
public Path getOutputPath() {
- return output.getPath();
+ return getPrimaryOutput().getPath();
}
@Override
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index fad138c576..b485dcd290 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -637,6 +637,8 @@ java_test(
"//src/main/java/com/google/devtools/build/lib:io",
"//src/main/java/com/google/devtools/build/lib:util",
"//src/main/java/com/google/devtools/build/lib/actions",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/protobuf:extra_actions_base_java_proto",
"//third_party:jsr305",
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java b/src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java
index b1e63b6039..2fd14211e2 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java
@@ -22,8 +22,12 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.util.DummyExecutor;
import com.google.devtools.build.lib.analysis.actions.ExecutableSymlinkAction;
import com.google.devtools.build.lib.exec.SingleBuildFileCache;
+import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext;
+import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.testutil.Scratch;
import com.google.devtools.build.lib.testutil.TestFileOutErr;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import org.junit.Before;
@@ -112,4 +116,35 @@ public class ExecutableSymlinkActionTest {
.isTrue();
}
}
+
+ @Test
+ public void testCodec() throws Exception {
+ Path file = inputRoot.getRoot().getRelative("some-file");
+ FileSystemUtils.createEmptyFile(file);
+ file.setExecutable(/*executable=*/ false);
+ Artifact input = new Artifact(file, inputRoot);
+ Artifact output = new Artifact(outputRoot.getRoot().getRelative("some-output"), outputRoot);
+ ExecutableSymlinkAction action = new ExecutableSymlinkAction(NULL_ACTION_OWNER, input, output);
+ new SerializationTester(action)
+ .setWriteContextFactory(
+ () ->
+ new SerializationContext(
+ ImmutableMap.of(FileSystem.class, scratch.getFileSystem())))
+ .setReadContextFactory(
+ () ->
+ new DeserializationContext(
+ ImmutableMap.of(FileSystem.class, scratch.getFileSystem())))
+ .setVerificationFunction(
+ (in, out) -> {
+ ExecutableSymlinkAction inAction = (ExecutableSymlinkAction) in;
+ ExecutableSymlinkAction outAction = (ExecutableSymlinkAction) out;
+ assertThat(inAction.getPrimaryInput().getFilename())
+ .isEqualTo(outAction.getPrimaryInput().getFilename());
+ assertThat(inAction.getPrimaryOutput().getFilename())
+ .isEqualTo(outAction.getPrimaryOutput().getFilename());
+ assertThat(inAction.getOwner()).isEqualTo(outAction.getOwner());
+ assertThat(inAction.getProgressMessage()).isEqualTo(outAction.getProgressMessage());
+ })
+ .runTests();
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
index d29e5337a8..caf56bdebf 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
@@ -24,7 +24,11 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Executor;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.exec.util.TestExecutorBuilder;
+import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext;
+import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.testutil.TestConstants;
+import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import org.junit.Before;
@@ -91,4 +95,29 @@ public class SymlinkActionTest extends BuildViewTestCase {
assertThat(action.getPrimaryInput()).isEqualTo(inputArtifact);
assertThat(action.getPrimaryOutput()).isEqualTo(outputArtifact);
}
+
+ @Test
+ public void testCodec() throws Exception {
+ new SerializationTester(action)
+ .setWriteContextFactory(
+ () ->
+ new SerializationContext(
+ ImmutableMap.of(FileSystem.class, scratch.getFileSystem())))
+ .setReadContextFactory(
+ () ->
+ new DeserializationContext(
+ ImmutableMap.of(FileSystem.class, scratch.getFileSystem())))
+ .setVerificationFunction(
+ (in, out) -> {
+ SymlinkAction inAction = (SymlinkAction) in;
+ SymlinkAction outAction = (SymlinkAction) out;
+ assertThat(inAction.getPrimaryInput().getFilename())
+ .isEqualTo(outAction.getPrimaryInput().getFilename());
+ assertThat(inAction.getPrimaryOutput().getFilename())
+ .isEqualTo(outAction.getPrimaryOutput().getFilename());
+ assertThat(inAction.getOwner()).isEqualTo(outAction.getOwner());
+ assertThat(inAction.getProgressMessage()).isEqualTo(outAction.getProgressMessage());
+ })
+ .runTests();
+ }
}