Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
9482232
Updating tests to account for API changes
dougqh Jan 12, 2026
8720c24
Adding tagIterator and valueIterator
dougqh Jan 12, 2026
fbec328
Adding checks for EntryIterator
dougqh Jan 12, 2026
2864bac
Removing EntryIterator and EntryChangeIterator
dougqh Jan 12, 2026
43bbea1
spotless
dougqh Jan 12, 2026
5fadff5
Merge branch 'master' into dougqh/tagmap-entryreader
dougqh Jan 13, 2026
3c0997f
Refining handling of primitive types
dougqh Jan 16, 2026
b192679
Refining comment in toBoolean
dougqh Jan 16, 2026
cffac87
Adding more TagValueConversionTest-s
dougqh Jan 16, 2026
8c51f7f
Adding Entry tests for byte and short boxes
dougqh Jan 16, 2026
17b1255
spotless
dougqh Jan 16, 2026
e18b404
Merge branch 'master' into dougqh/tagmap-entryreader
dougqh Jan 16, 2026
5698bff
Merge branch 'master' into dougqh/tagmap-entryreader
dougqh Jan 20, 2026
9d43d47
Direct TagMap.Entry support in AgentSpan / DDSpan
dougqh Jan 28, 2026
26cab22
Adding public create methods to TagMap.Entry
dougqh Jan 28, 2026
f6ceef1
spotless
dougqh Jan 28, 2026
501ade2
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh Jan 29, 2026
40847ac
Fixed merge
dougqh Jan 29, 2026
d96ebfb
Clarifying comments
dougqh Jan 29, 2026
9f64448
Adding tests for TagMap.Entry.create
dougqh Jan 29, 2026
b7327b5
spotless
dougqh Jan 29, 2026
6fa193a
Comments
dougqh Jan 29, 2026
c97cdee
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh Jan 29, 2026
531f63b
Adding test for TagMap.Entry setters
dougqh Jan 29, 2026
2b89bfc
Merge branch 'dougqh/fdirect-apis-for-tagmap-entry' of github.com:Dat…
dougqh Jan 29, 2026
db10ed5
Adding missing import
dougqh Jan 30, 2026
37d1009
spotless
dougqh Jan 30, 2026
6f2160f
Groovy codeNarc
dougqh Jan 30, 2026
4d0be98
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh Jan 30, 2026
70904c5
Reusing TagMap.Entry for GitInfo
dougqh Feb 2, 2026
e26c70b
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh Feb 2, 2026
53e4441
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh Feb 3, 2026
701dc6c
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh Feb 4, 2026
4ec6393
Update dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java
dougqh Feb 5, 2026
9891002
Switching to just camelCase for test method names
dougqh Feb 5, 2026
fcc7ed0
Better null support
dougqh Feb 5, 2026
6752a4b
Adding null TagMap.Entry tests to SpanTest
dougqh Feb 5, 2026
98aad8a
Clean-up
dougqh Feb 5, 2026
702d59f
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh Feb 5, 2026
f603aa0
Fixing silly oversight - name collision in test cases
dougqh Feb 5, 2026
e11513e
Merge branch 'dougqh/fdirect-apis-for-tagmap-entry' of github.com:Dat…
dougqh Feb 5, 2026
a077c82
Merge branch 'master' into dougqh/fdirect-apis-for-tagmap-entry
dougqh Feb 5, 2026
0795229
Merge branch 'dougqh/fdirect-apis-for-tagmap-entry' into dougqh/gitin…
dougqh Feb 5, 2026
f566c74
Clarifying null handling
dougqh Feb 5, 2026
a978239
Merge branch 'master' into dougqh/gitinfo-entry-reuse
dougqh Feb 5, 2026
b262e3e
More final
dougqh Feb 5, 2026
849930d
Merge branch 'master' into dougqh/gitinfo-entry-reuse
dougqh Feb 5, 2026
fd9210b
Fixing null handling
dougqh Feb 5, 2026
05347ab
Merge branch 'dougqh/gitinfo-entry-reuse' of github.com:DataDog/dd-tr…
dougqh Feb 5, 2026
b5701ef
spotless
dougqh Feb 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package datadog.trace.common;

import datadog.trace.api.DDTags;
import datadog.trace.api.git.GitInfo;
import datadog.trace.api.git.GitInfoProvider;
import datadog.trace.api.interceptor.AbstractTraceInterceptor;
Expand Down Expand Up @@ -30,8 +29,7 @@ public Collection<? extends MutableSpan> onTraceComplete(
String ciWorkspacePath = (String) firstSpan.getTag(Tags.CI_WORKSPACE_PATH);

GitInfo gitInfo = GitInfoProvider.INSTANCE.getGitInfo(ciWorkspacePath);
firstSpan.setTag(DDTags.INTERNAL_GIT_REPOSITORY_URL, gitInfo.getRepositoryURL());
firstSpan.setTag(DDTags.INTERNAL_GIT_COMMIT_SHA, gitInfo.getCommit().getSha());
gitInfo.addTags(firstSpan);

return trace;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
import datadog.trace.util.Strings;
import java.util.Objects;

public class CommitInfo {

public final class CommitInfo {
public static final CommitInfo NOOP =
new CommitInfo(null, PersonInfo.NOOP, PersonInfo.NOOP, null);

Expand Down
22 changes: 20 additions & 2 deletions internal-api/src/main/java/datadog/trace/api/git/GitInfo.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,34 @@
package datadog.trace.api.git;

import datadog.trace.api.DDTags;
import datadog.trace.api.TagMap;
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
import java.util.Objects;

public class GitInfo {

public final class GitInfo {
public static final GitInfo NOOP = new GitInfo(null, null, null, CommitInfo.NOOP);

private final String repositoryURL;
private final String branch;
private final String tag;
private final CommitInfo commit;

private final TagMap.Entry repositoryEntry;
private final TagMap.Entry commitEntry;

public GitInfo(String repositoryURL, String branch, String tag, CommitInfo commit) {
this.repositoryURL = repositoryURL;
this.branch = branch;
this.tag = tag;
this.commit = commit;

// GitInfo is reused across many traces, so create entries once and reuse them (see addTags)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Despite the rest of this class being coded defensively for null - as far as I could tell from GitMetadataTraceInterceptor, repositoryURL and commit.getSha() are never null.

That said, I'm happy to add defensive here and in addTags if so desired.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In Test Optimization we've seen some edge cases in which commit.getSha() could be null (seems much more unlikely for repositoryURL). We usually have to point them to set the git info through environment variables in those cases. Will the TagMap.Entry.create call have issues with a null object?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good to know.

No, TagMap.Entry.create doesn't support having a null value.
In AgentSpan / DDSpan setting a null tag is translated into a removal.

TagMap does have EntryRemoval for that purpose, but EntryRemoval-s are never stored in TagMap directly just in TagMap.Ledger-s.

I think the solution is just to guard against the null-s. I just wanted to clarify whether or not null-s were expected in the Git related code.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In another PR, I've tweaked TagMap.Entry.create to allow null & empty String to return a null TagMap.Entry.
And now, AgentSpan / DDSpan ignore being called with a null TagMap.Entry.

So that now allows null to be handled simply in the calling code, I'll update this PR once the other one is merged.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Thanks for the review. You were right that commit sha can be null.

// null & empty values result in null entries which nop when added to a span
this.repositoryEntry = TagMap.Entry.create(DDTags.INTERNAL_GIT_REPOSITORY_URL, repositoryURL);
this.commitEntry =
commit == null
? null
: TagMap.Entry.create(DDTags.INTERNAL_GIT_COMMIT_SHA, commit.getSha());
}

public String getRepositoryURL() {
Expand All @@ -34,6 +47,11 @@ public CommitInfo getCommit() {
return commit;
}

public void addTags(AgentSpan span) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think eventually I'd like introduce an interface for objects that add tags to span or TagMap.
Since this is the first change of this sort, I decided to share this as is to solicit thoughts on the matter.

span.setTag(this.repositoryEntry);
span.setTag(this.commitEntry);
}

public boolean isEmpty() {
return (repositoryURL == null || repositoryURL.isEmpty())
&& (branch == null || branch.isEmpty())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
import java.util.Objects;
import java.util.TimeZone;

public class PersonInfo {

public final class PersonInfo {
public static final PersonInfo NOOP = new PersonInfo();

private static final String DATE_FORMAT_ISO8601 = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
Expand Down