Skip to content

Commit 445381b

Browse files
committed
fixes #107 process "\ No newline at end of file"
1 parent 7647c0a commit 445381b

File tree

5 files changed

+54460
-1
lines changed

5 files changed

+54460
-1
lines changed

java-diff-utils/src/main/java/com/github/difflib/unifieddiff/UnifiedDiffFile.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public final class UnifiedDiffFile {
3232
private String newFileMode;
3333
private String deletedFileMode;
3434
private Patch<String> patch = new Patch<>();
35+
private boolean noNewLineAtTheEndOfTheFile = false;
3536

3637
public String getDiffCommand() {
3738
return diffCommand;
@@ -110,4 +111,12 @@ public String getDeletedFileMode() {
110111
public void setDeletedFileMode(String deletedFileMode) {
111112
this.deletedFileMode = deletedFileMode;
112113
}
114+
115+
public boolean isNoNewLineAtTheEndOfTheFile() {
116+
return noNewLineAtTheEndOfTheFile;
117+
}
118+
119+
public void setNoNewLineAtTheEndOfTheFile(boolean noNewLineAtTheEndOfTheFile) {
120+
this.noNewLineAtTheEndOfTheFile = noNewLineAtTheEndOfTheFile;
121+
}
113122
}

java-diff-utils/src/main/java/com/github/difflib/unifieddiff/UnifiedDiffReader.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,13 @@ private UnifiedDiff parse() throws IOException, UnifiedDiffParserException {
111111
}
112112
}
113113
line = READER.readLine();
114+
115+
if ("\\ No newline at end of file".equals(line)) {
116+
actualFile.setNoNewLineAtTheEndOfTheFile(true);
117+
line = READER.readLine();
118+
}
114119
}
115-
if (line == null || line.startsWith("--")) {
120+
if (line == null || (line.startsWith("--") && !line.startsWith("---"))) {
116121
break;
117122
}
118123
}

java-diff-utils/src/test/java/com/github/difflib/unifieddiff/UnifiedDiffReaderTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,4 +252,35 @@ public void testParseIssue104() throws IOException {
252252

253253
assertThat(diff.getTail()).isEqualTo("2.14.4");
254254
}
255+
256+
@Test
257+
public void testParseIssue107BazelDiff() throws IOException {
258+
UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(
259+
UnifiedDiffReaderTest.class.getResourceAsStream("01-bazel-strip-unused.patch.diff"));
260+
261+
assertThat(diff.getFiles().size()).isEqualTo(450);
262+
263+
final UnifiedDiffFile file = diff.getFiles().get(0);
264+
assertThat(file.getFromFile()).isEqualTo("./src/main/java/com/amazonaws/AbortedException.java");
265+
assertThat(file.getToFile()).isEqualTo("/home/greg/projects/bazel/third_party/aws-sdk-auth-lite/src/main/java/com/amazonaws/AbortedException.java");
266+
267+
assertThat(diff.getFiles().stream()
268+
.filter(f -> f.isNoNewLineAtTheEndOfTheFile())
269+
.count())
270+
.isEqualTo(48);
271+
}
272+
273+
@Test
274+
public void testParseIssue107_2() throws IOException {
275+
UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(
276+
UnifiedDiffReaderTest.class.getResourceAsStream("problem_diff_issue107.diff"));
277+
278+
assertThat(diff.getFiles().size()).isEqualTo(2);
279+
280+
final UnifiedDiffFile file = diff.getFiles().get(0);
281+
UnifiedDiffFile file1 = diff.getFiles().get(0);
282+
assertThat(file1.getFromFile()).isEqualTo("Main.java");
283+
assertThat(file1.getPatch().getDeltas().size()).isEqualTo(1);
284+
285+
}
255286
}

0 commit comments

Comments
 (0)