Skip to content

Commit 7d58819

Browse files
Extract Diff interface and implement polymorphic serialization
1 parent 89b8658 commit 7d58819

26 files changed

+230
-43
lines changed

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/EarlyFlakeDetectionSettingsSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.trace.civisibility.config;
22

3-
import datadog.trace.civisibility.ipc.Serializer;
3+
import datadog.trace.civisibility.ipc.serialization.Serializer;
44
import java.nio.ByteBuffer;
55
import java.util.List;
66

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettings.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import datadog.trace.api.civisibility.config.TestIdentifier;
44
import datadog.trace.api.civisibility.config.TestMetadata;
5-
import datadog.trace.civisibility.git.Diff;
6-
import datadog.trace.civisibility.ipc.Serializer;
5+
import datadog.trace.civisibility.diff.Diff;
6+
import datadog.trace.civisibility.ipc.serialization.Serializer;
77
import java.nio.ByteBuffer;
88
import java.util.BitSet;
99
import java.util.Collection;
@@ -205,7 +205,7 @@ public static ByteBuffer serialize(ExecutionSettings settings) {
205205
s.write(settings.flakyTests, TestIdentifierSerializer::serialize);
206206
s.write(settings.knownTests, TestIdentifierSerializer::serialize);
207207

208-
settings.pullRequestDiff.serialize(s);
208+
Diff.SERIALIZER.serialize(settings.pullRequestDiff, s);
209209

210210
return s.flush();
211211
}
@@ -234,7 +234,7 @@ public static ExecutionSettings deserialize(ByteBuffer buffer) {
234234
Collection<TestIdentifier> knownTests =
235235
Serializer.readSet(buffer, TestIdentifierSerializer::deserialize);
236236

237-
Diff diff = Diff.deserialize(buffer);
237+
Diff diff = Diff.SERIALIZER.deserialize(buffer);
238238

239239
return new ExecutionSettings(
240240
itrEnabled,

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import datadog.trace.api.git.GitInfo;
99
import datadog.trace.api.git.GitInfoProvider;
1010
import datadog.trace.civisibility.ci.PullRequestInfo;
11-
import datadog.trace.civisibility.git.Diff;
11+
import datadog.trace.civisibility.diff.Diff;
1212
import datadog.trace.civisibility.git.tree.GitClient;
1313
import datadog.trace.civisibility.git.tree.GitDataUploader;
1414
import java.nio.file.Path;
@@ -304,8 +304,7 @@ private Diff getPullRequestDiff(boolean impactedTestsDetectionEnabled) {
304304
if (repositoryRoot == null || !impactedTestsDetectionEnabled) {
305305
return Diff.EMPTY;
306306
}
307-
// FIXME nikita: add file-based granularity fallback if Git executable is not available (add
308-
// telemetry for backend)?
307+
// FIXME nikita: add file-based granularity fallback (+ telemetry)
309308
// FIXME nikita: add integration/smoke tests
310309
try {
311310
GitClient gitClient = gitClientFactory.create(repositoryRoot);

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/JvmInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import datadog.trace.api.Config;
44
import datadog.trace.api.civisibility.CiVisibilityWellKnownTags;
5-
import datadog.trace.civisibility.ipc.Serializer;
5+
import datadog.trace.civisibility.ipc.serialization.Serializer;
66
import java.nio.ByteBuffer;
77
import java.util.Objects;
88

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/TestIdentifierSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package datadog.trace.civisibility.config;
22

33
import datadog.trace.api.civisibility.config.TestIdentifier;
4-
import datadog.trace.civisibility.ipc.Serializer;
4+
import datadog.trace.civisibility.ipc.serialization.Serializer;
55
import java.nio.ByteBuffer;
66

77
public abstract class TestIdentifierSerializer {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/TestMetadataSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package datadog.trace.civisibility.config;
22

33
import datadog.trace.api.civisibility.config.TestMetadata;
4-
import datadog.trace.civisibility.ipc.Serializer;
4+
import datadog.trace.civisibility.ipc.serialization.Serializer;
55
import java.nio.ByteBuffer;
66

77
public abstract class TestMetadataSerializer {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package datadog.trace.civisibility.diff;
2+
3+
import datadog.trace.civisibility.ipc.serialization.PolymorphicSerializer;
4+
import datadog.trace.civisibility.ipc.serialization.SerializableType;
5+
6+
public interface Diff extends SerializableType {
7+
8+
Diff EMPTY = LineDiff.EMPTY;
9+
10+
PolymorphicSerializer<Diff> SERIALIZER = new PolymorphicSerializer<>(LineDiff.class);
11+
12+
boolean contains(String relativePath, int startLine, int endLine);
13+
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/Diff.java renamed to dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/diff/LineDiff.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
1-
package datadog.trace.civisibility.git;
1+
package datadog.trace.civisibility.diff;
22

3-
import datadog.trace.civisibility.ipc.Serializer;
3+
import datadog.trace.civisibility.ipc.serialization.Serializer;
44
import java.nio.ByteBuffer;
55
import java.util.BitSet;
66
import java.util.Collections;
77
import java.util.Map;
88
import java.util.Objects;
99

10-
public class Diff {
10+
/** Diff data with per-line granularity. */
11+
public class LineDiff implements Diff {
1112

12-
public static final Diff EMPTY = new Diff(Collections.emptyMap());
13+
public static final LineDiff EMPTY = new LineDiff(Collections.emptyMap());
1314

1415
private final Map<String, BitSet> linesByRelativePath;
1516

16-
public Diff(Map<String, BitSet> linesByRelativePath) {
17+
public LineDiff(Map<String, BitSet> linesByRelativePath) {
1718
this.linesByRelativePath = linesByRelativePath;
1819
}
1920

2021
public Map<String, BitSet> getLinesByRelativePath() {
2122
return Collections.unmodifiableMap(linesByRelativePath);
2223
}
2324

25+
@Override
2426
public boolean contains(String relativePath, int startLine, int endLine) {
2527
BitSet lines = linesByRelativePath.get(relativePath);
2628
if (lines == null) {
@@ -31,14 +33,15 @@ public boolean contains(String relativePath, int startLine, int endLine) {
3133
return changedLine != -1 && changedLine <= endLine;
3234
}
3335

36+
@Override
3437
public void serialize(Serializer s) {
3538
s.write(linesByRelativePath, Serializer::write, Serializer::write);
3639
}
3740

38-
public static Diff deserialize(ByteBuffer buffer) {
41+
public static LineDiff deserialize(ByteBuffer buffer) {
3942
Map<String, BitSet> linesByRelativePath =
4043
Serializer.readMap(buffer, Serializer::readString, Serializer::readBitSet);
41-
return new Diff(linesByRelativePath);
44+
return new LineDiff(linesByRelativePath);
4245
}
4346

4447
@Override
@@ -49,7 +52,7 @@ public boolean equals(Object o) {
4952
if (o == null || getClass() != o.getClass()) {
5053
return false;
5154
}
52-
Diff diff = (Diff) o;
55+
LineDiff diff = (LineDiff) o;
5356
return Objects.equals(linesByRelativePath, diff.linesByRelativePath);
5457
}
5558

@@ -60,6 +63,6 @@ public int hashCode() {
6063

6164
@Override
6265
public String toString() {
63-
return "Diff{" + "linesByRelativePath=" + linesByRelativePath + '}';
66+
return "LineDiff{linesByRelativePath=" + linesByRelativePath + '}';
6467
}
6568
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
88
import datadog.trace.api.civisibility.telemetry.tag.Command;
99
import datadog.trace.api.civisibility.telemetry.tag.ExitCode;
10-
import datadog.trace.civisibility.git.Diff;
10+
import datadog.trace.civisibility.diff.LineDiff;
1111
import datadog.trace.civisibility.utils.ShellCommandExecutor;
1212
import datadog.trace.util.Strings;
1313
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -554,7 +554,7 @@ private Path createTempDirectory() throws IOException {
554554
* @throws InterruptedException If current thread was interrupted while waiting for Git command to
555555
* finish
556556
*/
557-
public @NonNull Diff getGitDiff(String baseCommit, String targetCommit)
557+
public @NonNull LineDiff getGitDiff(String baseCommit, String targetCommit)
558558
throws IOException, TimeoutException, InterruptedException {
559559
if (Strings.isNotBlank(baseCommit) && Strings.isNotBlank(targetCommit)) {
560560
return executeCommand(
@@ -573,7 +573,7 @@ private Path createTempDirectory() throws IOException {
573573
"Base commit and/or target commit info is not available, returning empty git diff: {}/{}",
574574
baseCommit,
575575
targetCommit);
576-
return Diff.EMPTY;
576+
return LineDiff.EMPTY;
577577
}
578578
}
579579

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDiffParser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.trace.civisibility.git.tree;
22

3-
import datadog.trace.civisibility.git.Diff;
3+
import datadog.trace.civisibility.diff.LineDiff;
44
import edu.umd.cs.findbugs.annotations.NonNull;
55
import java.io.BufferedReader;
66
import java.io.IOException;
@@ -20,7 +20,7 @@ public class GitDiffParser {
2020
private static final Pattern CHANGED_LINES_PATTERN =
2121
Pattern.compile("^@@ -\\d+(,\\d+)? \\+(?<startline>\\d+)(,(?<count>\\d+))? @@");
2222

23-
public static @NonNull Diff parse(InputStream input) throws IOException {
23+
public static @NonNull LineDiff parse(InputStream input) throws IOException {
2424
Map<String, BitSet> linesByRelativePath = new HashMap<>();
2525

2626
BufferedReader bufferedReader =
@@ -59,6 +59,6 @@ public class GitDiffParser {
5959
linesByRelativePath.put(changedFile, changedLines);
6060
}
6161

62-
return new Diff(linesByRelativePath);
62+
return new LineDiff(linesByRelativePath);
6363
}
6464
}

0 commit comments

Comments
 (0)