diff --git a/vcs/src/main/java/org/openjdk/skara/vcs/UnifiedDiffParser.java b/vcs/src/main/java/org/openjdk/skara/vcs/UnifiedDiffParser.java index 188edb225..208895439 100644 --- a/vcs/src/main/java/org/openjdk/skara/vcs/UnifiedDiffParser.java +++ b/vcs/src/main/java/org/openjdk/skara/vcs/UnifiedDiffParser.java @@ -70,6 +70,10 @@ public static List parseSingleFileDiff(List lines) { var hunks = new ArrayList(); while (i < lines.size()) { + if (lines.get(i).startsWith("Binary files ") && lines.get(i).endsWith(" differ")) { + i++; + continue; + } var words = lines.get(i).split("\\s"); if (!words[0].startsWith("@@")) { throw new IllegalStateException("Unexpected diff line at index " + i + ": " + lines.get(i)); @@ -152,6 +156,8 @@ public static List parseSingleFileDiff(Range from, Range to, List sourceHasNewlineAtEndOfFile = false; } i++; + } else if (line.startsWith("Binary files") && line.endsWith("differ")) { + i++; } else { throw new IllegalStateException("Unexpected diff line: " + line); } diff --git a/vcs/src/test/java/org/openjdk/skara/vcs/UnifiedDiffParserTests.java b/vcs/src/test/java/org/openjdk/skara/vcs/UnifiedDiffParserTests.java index 751d710e5..fbc284f15 100644 --- a/vcs/src/test/java/org/openjdk/skara/vcs/UnifiedDiffParserTests.java +++ b/vcs/src/test/java/org/openjdk/skara/vcs/UnifiedDiffParserTests.java @@ -421,4 +421,15 @@ public void noNewline() { assertEquals(1, hunks.size()); assertFalse(hunks.get(0).target().hasNewlineAtEndOfFile()); } + + @Test + public void binaryFile() { + var diff = + "diff --git a/file.bin b/file.bin\n" + + "new file mode 100644\n" + + "index 0000000000000000000000000000000000000000..2020dd2b626d1bcf60351a2be801548eb65c53cd\n" + + "Binary files /dev/null and b/file.bin differ"; + var hunks = UnifiedDiffParser.parseSingleFileDiff(diff.split("\n")); + assertEquals(List.of(), hunks); + } }