From ff4938668db34405f60e95ef03cfd86425d3ab17 Mon Sep 17 00:00:00 2001 From: Jesper Josefsson Date: Sun, 18 Nov 2018 15:00:04 +0200 Subject: [PATCH 1/2] Gradle fixes. gradlew should be executable The project should have a name and a group in order to support composite builds. --- build.gradle | 1 + gradlew | 0 settings.gradle | 1 + 3 files changed, 2 insertions(+) mode change 100644 => 100755 gradlew create mode 100644 settings.gradle diff --git a/build.gradle b/build.gradle index 0e32092..82c8ff0 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,7 @@ repositories { // run gradle with "-Dsnapshot=true" to automatically append "-SNAPSHOT" to the version version = '1.5' + (Boolean.valueOf(System.getProperty("snapshot")) ? "-SNAPSHOT" : "") +group = 'io.reflectoring.diffparser' sourceCompatibility = 1.8 ext{ diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..13ec64f --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'diffparser' From 5ee19752e639c30b2e53fa3c2a7eab4c5dfea8cb Mon Sep 17 00:00:00 2001 From: Jesper Josefsson Date: Sun, 18 Nov 2018 15:25:32 +0200 Subject: [PATCH 2/2] Handle cases where the FROM line contains three dashes Need to use lookahead. --- .../reflectoring/diffparser/unified/ParserState.java | 12 ++++++------ .../reflectoring/diffparser/unified/GitDiffTest.java | 4 +++- .../reflectoring}/diffparser/unified/git.diff | 2 ++ .../io/reflectoring/diffparser/unified/svn.diff | 3 ++- .../io/reflectoring/diffparser/unified/tortoise.diff | 1 + 5 files changed, 14 insertions(+), 8 deletions(-) rename src/test/resources/{org/wickedsource => io/reflectoring}/diffparser/unified/git.diff (99%) diff --git a/src/main/java/io/reflectoring/diffparser/unified/ParserState.java b/src/main/java/io/reflectoring/diffparser/unified/ParserState.java index b695ecb..4538dc0 100644 --- a/src/main/java/io/reflectoring/diffparser/unified/ParserState.java +++ b/src/main/java/io/reflectoring/diffparser/unified/ParserState.java @@ -34,7 +34,7 @@ public enum ParserState { @Override public ParserState nextState(ParseWindow window) { String line = window.getFocusLine(); - if (matchesFromFilePattern(line)) { + if (matchesFromFilePattern(line, window.getFutureLine(1))) { logTransition(line, INITIAL, FROM_FILE); return FROM_FILE; } else { @@ -51,7 +51,7 @@ public ParserState nextState(ParseWindow window) { @Override public ParserState nextState(ParseWindow window) { String line = window.getFocusLine(); - if (matchesFromFilePattern(line)) { + if (matchesFromFilePattern(line, window.getFutureLine(1))) { logTransition(line, HEADER, FROM_FILE); return FROM_FILE; } else { @@ -237,8 +237,8 @@ protected void logTransition(String currentLine, ParserState fromState, ParserSt logger.debug(String.format("%12s -> %12s: %s", fromState, toState, currentLine)); } - protected boolean matchesFromFilePattern(String line) { - return line.startsWith("---"); + protected boolean matchesFromFilePattern(String line, String nextLine) { + return line.startsWith("---") && nextLine.startsWith("+++"); } protected boolean matchesToFilePattern(String line) { @@ -264,7 +264,7 @@ protected boolean matchesEndPattern(String line, ParseWindow window) { int i = 1; String futureLine; while ((futureLine = window.getFutureLine(i)) != null) { - if (matchesFromFilePattern(futureLine)) { + if (matchesFromFilePattern(futureLine, window.getFutureLine(i + 1))) { // We found the start of a new diff without another newline in between. That makes the current line the delimiter // between this diff and the next. return true; @@ -282,7 +282,7 @@ protected boolean matchesEndPattern(String line, ParseWindow window) { // some diff tools like "svn diff" do not put an empty line between two diffs // we add that empty line and call the method again String nextFromFileLine = window.getFutureLine(3); - if(nextFromFileLine != null && matchesFromFilePattern(nextFromFileLine)){ + if(nextFromFileLine != null && matchesFromFilePattern(nextFromFileLine, window.getFutureLine(4))){ window.addLine(1, ""); return matchesEndPattern(line, window); }else{ diff --git a/src/test/java/io/reflectoring/diffparser/unified/GitDiffTest.java b/src/test/java/io/reflectoring/diffparser/unified/GitDiffTest.java index dd09b06..21bedeb 100644 --- a/src/test/java/io/reflectoring/diffparser/unified/GitDiffTest.java +++ b/src/test/java/io/reflectoring/diffparser/unified/GitDiffTest.java @@ -46,8 +46,10 @@ public void testParse() { assertEquals(7, hunk1.getToFileRange().getLineCount()); List lines = hunk1.getLines(); - assertEquals(8, lines.size()); + assertEquals(10, lines.size()); assertEquals(Line.LineType.FROM, lines.get(3).getLineType()); assertEquals(Line.LineType.TO, lines.get(4).getLineType()); + assertEquals(Line.LineType.NEUTRAL, lines.get(5).getLineType()); + assertEquals(Line.LineType.FROM, lines.get(6).getLineType()); } } diff --git a/src/test/resources/org/wickedsource/diffparser/unified/git.diff b/src/test/resources/io/reflectoring/diffparser/unified/git.diff similarity index 99% rename from src/test/resources/org/wickedsource/diffparser/unified/git.diff rename to src/test/resources/io/reflectoring/diffparser/unified/git.diff index badd9f0..62b1836 100644 --- a/src/test/resources/org/wickedsource/diffparser/unified/git.diff +++ b/src/test/resources/io/reflectoring/diffparser/unified/git.diff @@ -8,6 +8,8 @@ index 5809534..4f4147a 100644 diffparser - 1.1-SNAPSHOT + 1.0 + --- +---- jar diffparser Parse textual diffs with Java. diff --git a/src/test/resources/io/reflectoring/diffparser/unified/svn.diff b/src/test/resources/io/reflectoring/diffparser/unified/svn.diff index 8145663..246ed29 100644 --- a/src/test/resources/io/reflectoring/diffparser/unified/svn.diff +++ b/src/test/resources/io/reflectoring/diffparser/unified/svn.diff @@ -29,7 +29,8 @@ Index: UnifiedDiffParserTest.java DiffParser parser = new UnifiedDiffParser(); - InputStream in = getClass().getResourceAsStream("svnlog.diff"); - -+ ++ +---- // when List diffs = parser.parse(in); diff --git a/src/test/resources/io/reflectoring/diffparser/unified/tortoise.diff b/src/test/resources/io/reflectoring/diffparser/unified/tortoise.diff index 739fb84..153858f 100644 --- a/src/test/resources/io/reflectoring/diffparser/unified/tortoise.diff +++ b/src/test/resources/io/reflectoring/diffparser/unified/tortoise.diff @@ -22,6 +22,7 @@ Modified: trunk/test1.txt @@ -1,4 +1,5 @@ -test1 -test1 +---- +aösdhasd +asdasd