aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java42
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesCodec.java48
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java61
3 files changed, 145 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
index 6ebdca048b..2362cbdd35 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
@@ -18,9 +18,15 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.hash.HashCode;
import com.google.devtools.build.lib.actions.Root;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skyframe.serialization.FastStringCodec;
+import com.google.devtools.build.lib.skyframe.serialization.PathCodec;
import com.google.devtools.build.lib.util.StringCanonicalizer;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.CodedOutputStream;
+import java.io.IOException;
+import java.util.Objects;
/**
* Encapsulates the directories related to a workspace.
@@ -210,4 +216,40 @@ public final class BlazeDirectories {
public static String getRelativeOutputPath(String productName) {
return StringCanonicalizer.intern(productName + "-out");
}
+
+ @Override
+ public int hashCode() {
+ // execRoot is derivable from other fields, but better safe than sorry.
+ return Objects.hash(serverDirectories, workspace, productName, execRoot);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof BlazeDirectories)) {
+ return false;
+ }
+ BlazeDirectories that = (BlazeDirectories) obj;
+ return this.serverDirectories.equals(that.serverDirectories)
+ && this.workspace.equals(that.workspace)
+ && this.productName.equals(that.productName)
+ // execRoot is derivable from other fields, but better safe than sorry.
+ && this.execRoot.equals(that.execRoot);
+ }
+
+ void serialize(CodedOutputStream codedOut, PathCodec pathCodec) throws IOException {
+ serverDirectories.serialize(codedOut, pathCodec);
+ pathCodec.serialize(workspace, codedOut);
+ FastStringCodec.INSTANCE.serialize(productName, codedOut);
+ }
+
+ static BlazeDirectories deserialize(CodedInputStream codedIn, PathCodec pathCodec)
+ throws IOException {
+ return new BlazeDirectories(
+ ServerDirectories.deserialize(codedIn, pathCodec),
+ pathCodec.deserialize(codedIn),
+ FastStringCodec.INSTANCE.deserialize(codedIn));
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesCodec.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesCodec.java
new file mode 100644
index 0000000000..61c3ff66be
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesCodec.java
@@ -0,0 +1,48 @@
+// Copyright 2017 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;
+
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.PathCodec;
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.CodedOutputStream;
+import java.io.IOException;
+
+/**
+ * {@link ObjectCodec} for {@link BlazeDirectories}. Delegates to {@link BlazeDirectories} for
+ * everything.
+ */
+public class BlazeDirectoriesCodec implements ObjectCodec<BlazeDirectories> {
+ private final PathCodec pathCodec;
+
+ public BlazeDirectoriesCodec(PathCodec pathCodec) {
+ this.pathCodec = pathCodec;
+ }
+
+ @Override
+ public Class<BlazeDirectories> getEncodedClass() {
+ return BlazeDirectories.class;
+ }
+
+ @Override
+ public void serialize(BlazeDirectories obj, CodedOutputStream codedOut) throws IOException {
+ obj.serialize(codedOut, pathCodec);
+ }
+
+ @Override
+ public BlazeDirectories deserialize(CodedInputStream codedIn) throws IOException {
+ return BlazeDirectories.deserialize(codedIn, pathCodec);
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
index 4c57ae6496..8c75f583d8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
@@ -18,10 +18,14 @@ import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skyframe.serialization.PathCodec;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.FileSystem;
import com.google.devtools.build.lib.vfs.Path;
-
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.CodedOutputStream;
+import java.io.IOException;
+import java.util.Objects;
import javax.annotation.Nullable;
/**
@@ -36,19 +40,25 @@ public final class ServerDirectories {
/** Where Blaze gets unpacked. */
private final Path installBase;
/** The content hash of everything in installBase. */
- private final HashCode installMD5;
+ @Nullable private final HashCode installMD5;
/** The root of the temp and output trees. */
private final Path outputBase;
public ServerDirectories(Path installBase, Path outputBase, @Nullable String installMD5) {
+ this(
+ installBase,
+ outputBase,
+ Strings.isNullOrEmpty(installMD5) ? null : checkMD5(HashCode.fromString(installMD5)));
+ }
+
+ private ServerDirectories(Path installBase, Path outputBase, HashCode installMD5) {
this.installBase = installBase;
this.outputBase = outputBase;
- this.installMD5 =
- Strings.isNullOrEmpty(installMD5) ? null : checkMD5(HashCode.fromString(installMD5));
+ this.installMD5 = installMD5;
}
public ServerDirectories(Path installBase, Path outputBase) {
- this(installBase, outputBase, null);
+ this(installBase, outputBase, (HashCode) null);
}
private static HashCode checkMD5(HashCode hash) {
@@ -95,4 +105,43 @@ public final class ServerDirectories {
public HashCode getInstallMD5() {
return installMD5;
}
-} \ No newline at end of file
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(installBase, installMD5, outputBase);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof ServerDirectories)) {
+ return false;
+ }
+ ServerDirectories that = (ServerDirectories) obj;
+ return this.installBase.equals(that.installBase)
+ && Objects.equals(this.installMD5, that.installMD5)
+ && this.outputBase.equals(that.outputBase);
+ }
+
+ void serialize(CodedOutputStream out, PathCodec pathCodec) throws IOException {
+ pathCodec.serialize(installBase, out);
+ out.writeBoolNoTag(installMD5 != null);
+ if (installMD5 != null) {
+ out.writeByteArrayNoTag(installMD5.asBytes());
+ }
+ pathCodec.serialize(outputBase, out);
+ }
+
+ static ServerDirectories deserialize(CodedInputStream in, PathCodec pathCodec)
+ throws IOException {
+ Path installBase = pathCodec.deserialize(in);
+ HashCode installMd5 = null;
+ if (in.readBool()) {
+ installMd5 = HashCode.fromBytes(in.readByteArray());
+ }
+ Path outputBase = pathCodec.deserialize(in);
+ return new ServerDirectories(installBase, outputBase, installMd5);
+ }
+}