From e17a00676f46a30ca174d83d929e531d83a8d9b5 Mon Sep 17 00:00:00 2001 From: Hussein Kasem Date: Wed, 16 Mar 2022 00:07:12 +0100 Subject: [PATCH 1/3] Add test to reproduce issue #141 --- .../difflib/unifieddiff/UnifiedDiffReaderTest.java | 10 ++++++++++ .../difflib/unifieddiff/problem_diff_issue141.diff | 11 +++++++++++ 2 files changed, 21 insertions(+) create mode 100644 java-diff-utils/src/test/resources/com/github/difflib/unifieddiff/problem_diff_issue141.diff diff --git a/java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java b/java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java index 912b72fd..0e4c4ef2 100644 --- a/java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java +++ b/java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java @@ -384,4 +384,14 @@ public void testParseIssue123() throws IOException { assertThat(diff.getFiles()).extracting(f -> f.getFromFile()).contains("src/java/main/org/apache/zookeeper/server/FinalRequestProcessor.java"); } + + @Test + public void testParseIssue141() throws IOException { + UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff( + UnifiedDiffReaderTest.class.getResourceAsStream("problem_diff_issue141.diff")); + UnifiedDiffFile file1 = diff.getFiles().get(0); + + assertThat(file1.getFromFile()).isEqualTo("a.txt"); + assertThat(file1.getToFile()).isEqualTo("a1.txt"); + } } diff --git a/java-diff-utils/src/test/resources/com/github/difflib/unifieddiff/problem_diff_issue141.diff b/java-diff-utils/src/test/resources/com/github/difflib/unifieddiff/problem_diff_issue141.diff new file mode 100644 index 00000000..ab33c250 --- /dev/null +++ b/java-diff-utils/src/test/resources/com/github/difflib/unifieddiff/problem_diff_issue141.diff @@ -0,0 +1,11 @@ +--- a.txt ++++ a1.txt +@@ -8,7 +8,7 @@ + + + +- 23 ++ 24 + + + 1 From d17877f9770ed685f8b6bb5d23a2480e264e049e Mon Sep 17 00:00:00 2001 From: Hussein Kasem Date: Wed, 16 Mar 2022 00:23:16 +0100 Subject: [PATCH 2/3] Fix assumption on test to match expected behaviour expressed on #141 --- .../com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java b/java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java index 0e4c4ef2..dcf32182 100644 --- a/java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java +++ b/java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java @@ -122,7 +122,7 @@ public void testParseIssue46() throws IOException { assertThat(diff.getFiles().size()).isEqualTo(1); UnifiedDiffFile file1 = diff.getFiles().get(0); - assertThat(file1.getFromFile()).isEqualTo(".vhd"); + assertThat(file1.getFromFile()).isEqualTo("a.vhd"); assertThat(file1.getPatch().getDeltas().size()).isEqualTo(1); assertThat(diff.getTail()).isNull(); From 49722a1d1a9e9bc1a3894566fdc197232b51b704 Mon Sep 17 00:00:00 2001 From: Hussein Kasem Date: Wed, 16 Mar 2022 00:17:46 +0100 Subject: [PATCH 3/3] Make "/" after "virtual" directories mandatory Now the regex only matches with "a/", "b/", "new/" and "old/", previously the slash was taken as optional. fixes #141 --- .../java/com/github/difflib/unifieddiff/UnifiedDiffReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-diff-utils/src/main/java/com/github/difflib/unifieddiff/UnifiedDiffReader.java b/java-diff-utils/src/main/java/com/github/difflib/unifieddiff/UnifiedDiffReader.java index 181b41ae..0ac22ce8 100644 --- a/java-diff-utils/src/main/java/com/github/difflib/unifieddiff/UnifiedDiffReader.java +++ b/java-diff-utils/src/main/java/com/github/difflib/unifieddiff/UnifiedDiffReader.java @@ -353,7 +353,7 @@ private String extractFileName(String _line) { line = line.substring(0, matcher.start()); } line = line.split("\t")[0]; - return line.substring(4).replaceFirst("^(a|b|old|new)(\\/)?", "") + return line.substring(4).replaceFirst("^(a|b|old|new)/", "") .trim(); }