Skip to content

Commit ac35199

Browse files
Improve Git commit info building (#9210)
1 parent a1e426c commit ac35199

File tree

15 files changed

+162
-387
lines changed

15 files changed

+162
-387
lines changed

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

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import datadog.trace.api.civisibility.telemetry.tag.Provider;
77
import datadog.trace.api.git.CommitInfo;
88
import datadog.trace.api.git.GitInfoProvider;
9-
import datadog.trace.api.git.PersonInfo;
109
import datadog.trace.civisibility.ci.CIInfo;
1110
import datadog.trace.civisibility.ci.CIProviderInfo;
1211
import datadog.trace.civisibility.ci.CITagsProvider;
@@ -127,23 +126,11 @@ static PullRequestInfo buildPullRequestInfo(
127126

128127
// complete with CI vars if user didn't provide all information
129128
PullRequestInfo ciInfo = PullRequestInfo.merge(userInfo, ciProviderInfo.buildPullRequestInfo());
130-
if (Strings.isNotBlank(ciInfo.getGitCommitHead().getSha())) {
129+
String headSha = ciInfo.getHeadCommit().getSha();
130+
if (Strings.isNotBlank(headSha)) {
131131
// if head sha present try to populate author, committer and message info through git client
132132
try {
133-
gitRepoUnshallow.unshallow(true);
134-
String headSha = ciInfo.getGitCommitHead().getSha();
135-
PersonInfo authorInfo =
136-
new PersonInfo(
137-
gitClient.getAuthorName(headSha),
138-
gitClient.getAuthorEmail(headSha),
139-
gitClient.getAuthorDate(headSha));
140-
PersonInfo committerInfo =
141-
new PersonInfo(
142-
gitClient.getCommitterName(headSha),
143-
gitClient.getCommitterEmail(headSha),
144-
gitClient.getCommitterDate(headSha));
145-
CommitInfo commitInfo =
146-
new CommitInfo(headSha, authorInfo, committerInfo, gitClient.getFullMessage(headSha));
133+
CommitInfo commitInfo = gitClient.getCommitInfo(headSha, true);
147134
return PullRequestInfo.merge(ciInfo, new PullRequestInfo(null, null, commitInfo, null));
148135
} catch (Exception ignored) {
149136
}

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,48 +140,47 @@ public CITagsBuilder withPullRequestBaseBranchSha(final PullRequestInfo pullRequ
140140
}
141141

142142
public CITagsBuilder withGitCommitHeadSha(final PullRequestInfo pullRequestInfo) {
143-
return putTagValue(Tags.GIT_COMMIT_HEAD_SHA, pullRequestInfo.getGitCommitHead().getSha());
143+
return putTagValue(Tags.GIT_COMMIT_HEAD_SHA, pullRequestInfo.getHeadCommit().getSha());
144144
}
145145

146146
public CITagsBuilder withGitCommitHeadAuthorName(final PullRequestInfo pullRequestInfo) {
147147
return putTagValue(
148-
Tags.GIT_COMMIT_HEAD_AUTHOR_NAME,
149-
pullRequestInfo.getGitCommitHead().getAuthor().getName());
148+
Tags.GIT_COMMIT_HEAD_AUTHOR_NAME, pullRequestInfo.getHeadCommit().getAuthor().getName());
150149
}
151150

152151
public CITagsBuilder withGitCommitHeadAuthorEmail(final PullRequestInfo pullRequestInfo) {
153152
return putTagValue(
154153
Tags.GIT_COMMIT_HEAD_AUTHOR_EMAIL,
155-
pullRequestInfo.getGitCommitHead().getAuthor().getEmail());
154+
pullRequestInfo.getHeadCommit().getAuthor().getEmail());
156155
}
157156

158157
public CITagsBuilder withGitCommitHeadAuthorDate(final PullRequestInfo pullRequestInfo) {
159158
return putTagValue(
160159
Tags.GIT_COMMIT_HEAD_AUTHOR_DATE,
161-
pullRequestInfo.getGitCommitHead().getAuthor().getIso8601Date());
160+
pullRequestInfo.getHeadCommit().getAuthor().getIso8601Date());
162161
}
163162

164163
public CITagsBuilder withGitCommitHeadCommitterName(final PullRequestInfo pullRequestInfo) {
165164
return putTagValue(
166165
Tags.GIT_COMMIT_HEAD_COMMITTER_NAME,
167-
pullRequestInfo.getGitCommitHead().getCommitter().getName());
166+
pullRequestInfo.getHeadCommit().getCommitter().getName());
168167
}
169168

170169
public CITagsBuilder withGitCommitHeadCommitterEmail(final PullRequestInfo pullRequestInfo) {
171170
return putTagValue(
172171
Tags.GIT_COMMIT_HEAD_COMMITTER_EMAIL,
173-
pullRequestInfo.getGitCommitHead().getCommitter().getEmail());
172+
pullRequestInfo.getHeadCommit().getCommitter().getEmail());
174173
}
175174

176175
public CITagsBuilder withGitCommitHeadCommitterDate(final PullRequestInfo pullRequestInfo) {
177176
return putTagValue(
178177
Tags.GIT_COMMIT_HEAD_COMMITTER_DATE,
179-
pullRequestInfo.getGitCommitHead().getCommitter().getIso8601Date());
178+
pullRequestInfo.getHeadCommit().getCommitter().getIso8601Date());
180179
}
181180

182181
public CITagsBuilder withGitCommitHeadMessage(final PullRequestInfo pullRequestInfo) {
183182
return putTagValue(
184-
Tags.GIT_COMMIT_HEAD_MESSAGE, pullRequestInfo.getGitCommitHead().getFullMessage());
183+
Tags.GIT_COMMIT_HEAD_MESSAGE, pullRequestInfo.getHeadCommit().getFullMessage());
185184
}
186185

187186
public CITagsBuilder withPullRequestNumber(final PullRequestInfo pullRequestInfo) {

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ public PullRequestInfo buildPullRequestInfo() {
109109

110110
String baseSha = null;
111111
String headSha = null;
112+
String prNumber = null;
112113

113114
Map<String, Object> pullRequest = (Map<String, Object>) eventJson.get("pull_request");
114115
if (pullRequest != null) {
@@ -121,9 +122,14 @@ public PullRequestInfo buildPullRequestInfo() {
121122
if (base != null) {
122123
baseSha = (String) base.get("sha");
123124
}
125+
126+
Double number = (Double) pullRequest.get("number");
127+
if (number != null) {
128+
prNumber = String.valueOf(number.intValue());
129+
}
124130
}
125131

126-
return new PullRequestInfo(baseRef, baseSha, new CommitInfo(headSha), null);
132+
return new PullRequestInfo(baseRef, baseSha, new CommitInfo(headSha), prNumber);
127133

128134
} catch (Exception e) {
129135
LOGGER.warn("Error while parsing GitHub event", e);

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ public class PullRequestInfo {
1212

1313
private final String pullRequestBaseBranch;
1414
private final String pullRequestBaseBranchSha;
15-
@Nonnull private final CommitInfo gitCommitHead;
15+
@Nonnull private final CommitInfo headCommit;
1616
private final String pullRequestNumber;
1717

1818
public PullRequestInfo(
1919
String pullRequestBaseBranch,
2020
String pullRequestBaseBranchSha,
21-
@Nonnull CommitInfo gitCommitHead,
21+
@Nonnull CommitInfo headCommit,
2222
String pullRequestNumber) {
2323
this.pullRequestBaseBranch = pullRequestBaseBranch;
2424
this.pullRequestBaseBranchSha = pullRequestBaseBranchSha;
25-
this.gitCommitHead = gitCommitHead;
25+
this.headCommit = headCommit;
2626
this.pullRequestNumber = pullRequestNumber;
2727
}
2828

@@ -35,8 +35,8 @@ public String getPullRequestBaseBranchSha() {
3535
}
3636

3737
@Nonnull
38-
public CommitInfo getGitCommitHead() {
39-
return gitCommitHead;
38+
public CommitInfo getHeadCommit() {
39+
return headCommit;
4040
}
4141

4242
public String getPullRequestNumber() {
@@ -46,14 +46,14 @@ public String getPullRequestNumber() {
4646
public boolean isEmpty() {
4747
return Strings.isBlank(pullRequestBaseBranch)
4848
&& Strings.isBlank(pullRequestBaseBranchSha)
49-
&& gitCommitHead.isEmpty()
49+
&& headCommit.isEmpty()
5050
&& Strings.isBlank(pullRequestNumber);
5151
}
5252

5353
public boolean isComplete() {
5454
return Strings.isNotBlank(pullRequestBaseBranch)
5555
&& Strings.isNotBlank(pullRequestBaseBranchSha)
56-
&& gitCommitHead.isComplete()
56+
&& headCommit.isComplete()
5757
&& Strings.isNotBlank(pullRequestNumber);
5858
}
5959

@@ -72,7 +72,7 @@ public static PullRequestInfo merge(PullRequestInfo info, PullRequestInfo fallba
7272
Strings.isNotBlank(info.pullRequestBaseBranchSha)
7373
? info.pullRequestBaseBranchSha
7474
: fallback.pullRequestBaseBranchSha,
75-
CommitInfo.merge(info.gitCommitHead, fallback.gitCommitHead),
75+
CommitInfo.merge(info.headCommit, fallback.headCommit),
7676
Strings.isNotBlank(info.pullRequestNumber)
7777
? info.pullRequestNumber
7878
: fallback.pullRequestNumber);
@@ -89,14 +89,14 @@ public boolean equals(Object o) {
8989
PullRequestInfo that = (PullRequestInfo) o;
9090
return Objects.equals(pullRequestBaseBranch, that.pullRequestBaseBranch)
9191
&& Objects.equals(pullRequestBaseBranchSha, that.pullRequestBaseBranchSha)
92-
&& Objects.equals(gitCommitHead, that.gitCommitHead)
92+
&& Objects.equals(headCommit, that.headCommit)
9393
&& Objects.equals(pullRequestNumber, that.pullRequestNumber);
9494
}
9595

9696
@Override
9797
public int hashCode() {
9898
return Objects.hash(
99-
pullRequestBaseBranch, pullRequestBaseBranchSha, gitCommitHead, pullRequestNumber);
99+
pullRequestBaseBranch, pullRequestBaseBranchSha, headCommit, pullRequestNumber);
100100
}
101101

102102
@Override
@@ -108,8 +108,8 @@ public String toString() {
108108
+ ", baseSHA='"
109109
+ pullRequestBaseBranchSha
110110
+ '\''
111-
+ ", commitSHA='"
112-
+ gitCommitHead
111+
+ ", headCommit='"
112+
+ headCommit
113113
+ '\''
114114
+ ", prNumber='"
115115
+ pullRequestNumber

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -396,12 +396,12 @@ private Map<TestSetting, Map<String, Collection<TestFQN>>> getTestManagementTest
396396
return Collections.emptyMap();
397397
}
398398
try {
399-
if (Strings.isNotBlank(pullRequestInfo.getGitCommitHead().getSha())
400-
&& Strings.isNotBlank(pullRequestInfo.getGitCommitHead().getFullMessage())) {
399+
if (Strings.isNotBlank(pullRequestInfo.getHeadCommit().getSha())
400+
&& Strings.isNotBlank(pullRequestInfo.getHeadCommit().getFullMessage())) {
401401
return configurationApi.getTestManagementTestsByModule(
402402
tracerEnvironment,
403-
pullRequestInfo.getGitCommitHead().getSha(),
404-
pullRequestInfo.getGitCommitHead().getFullMessage());
403+
pullRequestInfo.getHeadCommit().getSha(),
404+
pullRequestInfo.getHeadCommit().getFullMessage());
405405
} else {
406406
return configurationApi.getTestManagementTestsByModule(
407407
tracerEnvironment, tracerEnvironment.getSha(), tracerEnvironment.getCommitMessage());
@@ -421,16 +421,15 @@ private Diff getPullRequestDiff(boolean impactedTestsDetectionEnabled, String de
421421
try {
422422
if (repositoryRoot != null) {
423423
// ensure repo is not shallow before attempting to get git diff
424-
gitRepoUnshallow.unshallow(false);
424+
gitRepoUnshallow.unshallow();
425425

426426
String baseCommitSha = pullRequestInfo.getPullRequestBaseBranchSha();
427427
if (baseCommitSha == null) {
428428
baseCommitSha =
429429
gitClient.getBaseCommitSha(pullRequestInfo.getPullRequestBaseBranch(), defaultBranch);
430430
}
431431

432-
Diff diff =
433-
gitClient.getGitDiff(baseCommitSha, pullRequestInfo.getGitCommitHead().getSha());
432+
Diff diff = gitClient.getGitDiff(baseCommitSha, pullRequestInfo.getHeadCommit().getSha());
434433
if (diff != null) {
435434
return diff;
436435
}

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

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import datadog.trace.api.git.CommitInfo;
77
import datadog.trace.api.git.GitInfo;
88
import datadog.trace.api.git.GitInfoBuilder;
9-
import datadog.trace.api.git.PersonInfo;
109
import datadog.trace.civisibility.git.tree.GitClient;
1110
import java.util.List;
1211
import javax.annotation.Nullable;
@@ -39,20 +38,7 @@ public GitInfo build(@Nullable String repositoryPath) {
3938
List<String> tags = gitClient.getTags(GitClient.HEAD);
4039
String tag = !tags.isEmpty() ? tags.iterator().next() : null;
4140

42-
String currentCommitSha = gitClient.getSha(GitClient.HEAD);
43-
String fullMessage = gitClient.getFullMessage(GitClient.HEAD);
44-
45-
String authorName = gitClient.getAuthorName(GitClient.HEAD);
46-
String authorEmail = gitClient.getAuthorEmail(GitClient.HEAD);
47-
String authorDate = gitClient.getAuthorDate(GitClient.HEAD);
48-
PersonInfo author = new PersonInfo(authorName, authorEmail, authorDate);
49-
50-
String committerName = gitClient.getCommitterName(GitClient.HEAD);
51-
String committerEmail = gitClient.getCommitterEmail(GitClient.HEAD);
52-
String committerDate = gitClient.getCommitterDate(GitClient.HEAD);
53-
PersonInfo committer = new PersonInfo(committerName, committerEmail, committerDate);
54-
55-
CommitInfo commitInfo = new CommitInfo(currentCommitSha, author, committer, fullMessage);
41+
CommitInfo commitInfo = gitClient.getCommitInfo(GitClient.HEAD, false);
5642
return new GitInfo(remoteUrl, branch, tag, commitInfo);
5743

5844
} catch (Exception e) {

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

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

3+
import datadog.trace.api.git.CommitInfo;
34
import datadog.trace.civisibility.diff.LineDiff;
45
import java.io.IOException;
56
import java.nio.file.Path;
@@ -16,7 +17,7 @@ public interface GitClient {
1617

1718
boolean isShallow() throws IOException, TimeoutException, InterruptedException;
1819

19-
void unshallow(@Nullable String remoteCommitReference, boolean parentOnly)
20+
void unshallow(@Nullable String remoteCommitReference)
2021
throws IOException, TimeoutException, InterruptedException;
2122

2223
@Nullable
@@ -40,28 +41,10 @@ void unshallow(@Nullable String remoteCommitReference, boolean parentOnly)
4041
@Nullable
4142
String getSha(String reference) throws IOException, TimeoutException, InterruptedException;
4243

43-
@Nullable
44-
String getFullMessage(String commit) throws IOException, TimeoutException, InterruptedException;
45-
46-
@Nullable
47-
String getAuthorName(String commit) throws IOException, TimeoutException, InterruptedException;
48-
49-
@Nullable
50-
String getAuthorEmail(String commit) throws IOException, TimeoutException, InterruptedException;
51-
52-
@Nullable
53-
String getAuthorDate(String commit) throws IOException, TimeoutException, InterruptedException;
54-
55-
@Nullable
56-
String getCommitterName(String commit) throws IOException, TimeoutException, InterruptedException;
57-
58-
@Nullable
59-
String getCommitterEmail(String commit)
44+
@Nonnull
45+
CommitInfo getCommitInfo(String commit, boolean fetchIfNotPresent)
6046
throws IOException, TimeoutException, InterruptedException;
6147

62-
@Nullable
63-
String getCommitterDate(String commit) throws IOException, TimeoutException, InterruptedException;
64-
6548
@Nonnull
6649
List<String> getLatestCommits() throws IOException, TimeoutException, InterruptedException;
6750

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ private void uploadGitData() {
9191
LOGGER.debug("Starting git data upload, {}", gitClient);
9292

9393
if (!config.isCiVisibilityGitUnshallowDefer()) {
94-
gitRepoUnshallow.unshallow(false);
94+
gitRepoUnshallow.unshallow();
9595
}
9696

9797
GitInfo gitInfo = gitInfoProvider.getGitInfo(repoRoot);
@@ -112,7 +112,7 @@ private void uploadGitData() {
112112
return;
113113
}
114114

115-
if (config.isCiVisibilityGitUnshallowDefer() && gitRepoUnshallow.unshallow(false)) {
115+
if (config.isCiVisibilityGitUnshallowDefer() && gitRepoUnshallow.unshallow()) {
116116
latestCommits = gitClient.getLatestCommits();
117117
commitsToSkip = gitDataApi.searchCommits(remoteUrl, latestCommits);
118118
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ public GitRepoUnshallow(Config config, GitClient gitClient) {
1919
this.gitClient = gitClient;
2020
}
2121

22-
public synchronized boolean unshallow(boolean parentOnly)
22+
public synchronized boolean unshallow()
2323
throws IOException, InterruptedException, TimeoutException {
2424
if (!config.isCiVisibilityGitUnshallowEnabled() || !gitClient.isShallow()) {
2525
return false;
2626
}
2727

2828
long unshallowStart = System.currentTimeMillis();
2929
try {
30-
gitClient.unshallow(GitClient.HEAD, parentOnly);
30+
gitClient.unshallow(GitClient.HEAD);
3131
} catch (ShellCommandExecutor.ShellCommandFailedException e) {
3232
LOGGER.debug(
3333
"Could not unshallow using HEAD - assuming HEAD points to a local commit that does not exist in the remote repo",
@@ -36,12 +36,12 @@ public synchronized boolean unshallow(boolean parentOnly)
3636

3737
try {
3838
String upstreamBranch = gitClient.getUpstreamBranchSha();
39-
gitClient.unshallow(upstreamBranch, parentOnly);
39+
gitClient.unshallow(upstreamBranch);
4040
} catch (ShellCommandExecutor.ShellCommandFailedException e) {
4141
LOGGER.debug(
4242
"Could not unshallow using upstream branch - assuming currently checked out local branch does not track any remote branch",
4343
e);
44-
gitClient.unshallow(null, parentOnly);
44+
gitClient.unshallow(null);
4545
}
4646
LOGGER.debug("Repository unshallowing took {} ms", System.currentTimeMillis() - unshallowStart);
4747
return true;

0 commit comments

Comments
 (0)