From d4ad206b34a9b2dde2487b8f87297015e64325bb Mon Sep 17 00:00:00 2001 From: DJ Gregor Date: Wed, 12 Nov 2025 18:52:43 -0800 Subject: [PATCH] Fix GitClientTest.test git diff when diff.noprefix=true is used When diff.noprefix=true (or other git diff parameters that change the prefix format) used, it changes the output from "git diff" and and the test failure below is seen in GitClientTest.test git diff. I have used this git setting in my ~/.gitconfig file for years as it makes copying and pasting file names simpler. java.lang.IllegalStateException: Line @@ -26 +26 @@ namespace Datadog.Trace.Logging contains changed lines information, but no changed file info is available at datadog.trace.civisibility.git.tree.GitDiffParser.parse(GitDiffParser.java:48) at datadog.trace.civisibility.utils.ShellCommandExecutor.executeCommand(ShellCommandExecutor.java:153) at datadog.trace.civisibility.utils.ShellCommandExecutor.executeCommand(ShellCommandExecutor.java:57) at datadog.trace.civisibility.git.tree.ShellGitClient.lambda$getGitDiff$18(ShellGitClient.java:926) at datadog.trace.civisibility.git.tree.ShellGitClient.executeCommand(ShellGitClient.java:980) at datadog.trace.civisibility.git.tree.ShellGitClient.getGitDiff(ShellGitClient.java:923) at datadog.trace.civisibility.git.tree.GitClientTest.test git diff(GitClientTest.groovy:264) Setting diff.noprefix=true changes the file name pattern and it fails to match GitDiffParser.CHANGED_FILE_PATTERN. $ git diff | grep ^diff diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java $ GIT_CONFIG_PARAMETERS="'diff.noprefix=true'" git diff | grep ^diff diff --git dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java Notice the lack of "a/" and "b/" on the latter output, but you'll see that the pattern expects that: private static final Pattern CHANGED_FILE_PATTERN = Pattern.compile("^diff --git a/(?.+) b/(?.+)$"); The simple workaround is to pass "--default-prefix" to "git diff", however this option has only been present since 2023: https://github.com/git/git/commit/b39a5697296659c344cd0a286b51303fd5375fab A safer option would be to use "--no-prefix", which has existed since 2007: https://github.com/git/git/commit/eab9a40b6dd5c1c571b1deb264133db47bb4794d This adds "--no-prefix", updates the regex, and adjusts test files. --- .../civisibility/git/tree/GitDiffParser.java | 2 +- .../civisibility/git/tree/ShellGitClient.java | 9 +++++++- .../trace/civisibility/git/tree/git-diff.txt | 12 +++++----- .../civisibility/git/tree/larger-git-diff.txt | 22 +++++++++---------- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDiffParser.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDiffParser.java index 53ba6cbae29..374e3a75f6b 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDiffParser.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/GitDiffParser.java @@ -16,7 +16,7 @@ public class GitDiffParser { private static final Pattern CHANGED_FILE_PATTERN = - Pattern.compile("^diff --git a/(?.+) b/(?.+)$"); + Pattern.compile("^diff --git (?.+) (?.+)$"); private static final Pattern CHANGED_LINES_PATTERN = Pattern.compile("^@@ -\\d+(,\\d+)? \\+(?\\d+)(,(?\\d+))? @@"); diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java index f353b05c0b9..20584700300 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/git/tree/ShellGitClient.java @@ -929,6 +929,7 @@ public LineDiff getGitDiff(String baseCommit, String targetCommit) "diff", "-U0", "--word-diff=porcelain", + "--no-prefix", baseCommit, targetCommit)); } else { @@ -936,7 +937,13 @@ public LineDiff getGitDiff(String baseCommit, String targetCommit) Command.DIFF, () -> commandExecutor.executeCommand( - GitDiffParser::parse, "git", "diff", "-U0", "--word-diff=porcelain", baseCommit)); + GitDiffParser::parse, + "git", + "diff", + "-U0", + "--word-diff=porcelain", + "--no-prefix", + baseCommit)); } } diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/datadog/trace/civisibility/git/tree/git-diff.txt b/dd-java-agent/agent-ci-visibility/src/test/resources/datadog/trace/civisibility/git/tree/git-diff.txt index d79dc73c99a..36a9fd554f0 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/datadog/trace/civisibility/git/tree/git-diff.txt +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/datadog/trace/civisibility/git/tree/git-diff.txt @@ -1,16 +1,16 @@ -diff --git a/java/maven-junit4/pom.xml b/java/maven-junit4/pom.xml +diff --git java/maven-junit4/pom.xml java/maven-junit4/pom.xml index 6d73cda..2a1f220 100644 ---- a/java/maven-junit4/pom.xml -+++ b/java/maven-junit4/pom.xml +--- java/maven-junit4/pom.xml ++++ java/maven-junit4/pom.xml @@ -10 +10 @@ -java-maven-junit4 +java-maven-junit4-test-project ~ -diff --git a/java/maven-junit5/pom.xml b/java/maven-junit5/pom.xml +diff --git java/maven-junit5/pom.xml java/maven-junit5/pom.xml index 7b92d64..834a61c 100644 ---- a/java/maven-junit5/pom.xml -+++ b/java/maven-junit5/pom.xml +--- java/maven-junit5/pom.xml ++++ java/maven-junit5/pom.xml @@ -14 +14 @@ -module-b diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/datadog/trace/civisibility/git/tree/larger-git-diff.txt b/dd-java-agent/agent-ci-visibility/src/test/resources/datadog/trace/civisibility/git/tree/larger-git-diff.txt index 41e227c58eb..c628d1dfaaa 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/datadog/trace/civisibility/git/tree/larger-git-diff.txt +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/datadog/trace/civisibility/git/tree/larger-git-diff.txt @@ -1,16 +1,16 @@ -diff --git a/java/maven-junit4/pom.xml b/java/maven-junit4/pom.xml +diff --git java/maven-junit4/pom.xml java/maven-junit4/pom.xml index 6d73cda..2a1f220 100644 ---- a/java/maven-junit4/pom.xml -+++ b/java/maven-junit4/pom.xml +--- java/maven-junit4/pom.xml ++++ java/maven-junit4/pom.xml @@ -10 +10 @@ -java-maven-junit4 +java-maven-junit4-test-project ~ -diff --git a/java/maven-junit5/module-a/pom.xml b/java/maven-junit5/module-a/pom.xml +diff --git java/maven-junit5/module-a/pom.xml java/maven-junit5/module-a/pom.xml index 29a3a73..4567037 100644 ---- a/java/maven-junit5/module-a/pom.xml -+++ b/java/maven-junit5/module-a/pom.xml +--- java/maven-junit5/module-a/pom.xml ++++ java/maven-junit5/module-a/pom.xml @@ -8,3 +8,3 @@ -com.datadog.ci.test @@ -53,10 +53,10 @@ index 29a3a73..4567037 100644 @@ -34 +40 @@ ~ -diff --git a/java/maven-junit5/module-b/pom.xml b/java/maven-junit5/module-b/pom.xml +diff --git java/maven-junit5/module-b/pom.xml java/maven-junit5/module-b/pom.xml deleted file mode 100644 index f18dd09..0000000 ---- a/java/maven-junit5/module-b/pom.xml +--- java/maven-junit5/module-b/pom.xml +++ /dev/null @@ -1,17 +0,0 @@ - @@ -91,10 +91,10 @@ index f18dd09..0000000 ~ - ~ -diff --git a/java/maven-junit5/pom.xml b/java/maven-junit5/pom.xml +diff --git java/maven-junit5/pom.xml java/maven-junit5/pom.xml index 7b92d64..834a61c 100644 ---- a/java/maven-junit5/pom.xml -+++ b/java/maven-junit5/pom.xml +--- java/maven-junit5/pom.xml ++++ java/maven-junit5/pom.xml @@ -14 +14 @@ -module-b