Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit54324fb

Browse files
authored
Fixes#182 by parsing diffs with 'Binary files' (#183)
1 parent8df690f commit54324fb

File tree

7 files changed

+133
-4
lines changed

7 files changed

+133
-4
lines changed

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ public final class UnifiedDiffFile {
3333
privateStringtoTimestamp;
3434
privateStringindex;
3535
privateStringnewFileMode;
36+
privateStringoldMode;
37+
privateStringnewMode;
3638
privateStringdeletedFileMode;
39+
privateStringbinaryAdded;
40+
privateStringbinaryDeleted;
41+
privateStringbinaryEdited;
3742
privatePatch<String>patch =newPatch<>();
3843
privatebooleannoNewLineAtTheEndOfTheFile =false;
3944
privateIntegersimilarityIndex;
@@ -138,6 +143,46 @@ public void setDeletedFileMode(String deletedFileMode) {
138143
this.deletedFileMode =deletedFileMode;
139144
}
140145

146+
publicStringgetOldMode() {
147+
returnoldMode;
148+
}
149+
150+
publicvoidsetOldMode(StringoldMode) {
151+
this.oldMode =oldMode;
152+
}
153+
154+
publicStringgetNewMode() {
155+
returnnewMode;
156+
}
157+
158+
publicvoidsetNewMode(StringnewMode) {
159+
this.newMode =newMode;
160+
}
161+
162+
publicStringgetBinaryAdded() {
163+
returnbinaryAdded;
164+
}
165+
166+
publicvoidsetBinaryAdded(StringbinaryAdded) {
167+
this.binaryAdded =binaryAdded;
168+
}
169+
170+
publicStringgetBinaryDeleted() {
171+
returnbinaryDeleted;
172+
}
173+
174+
publicvoidsetBinaryDeleted(StringbinaryDeleted) {
175+
this.binaryDeleted =binaryDeleted;
176+
}
177+
178+
publicStringgetBinaryEdited() {
179+
returnbinaryEdited;
180+
}
181+
182+
publicvoidsetBinaryEdited(StringbinaryEdited) {
183+
this.binaryEdited =binaryEdited;
184+
}
185+
141186
publicbooleanisNoNewLineAtTheEndOfTheFile() {
142187
returnnoNewLineAtTheEndOfTheFile;
143188
}

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

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ public final class UnifiedDiffReader {
5555
privatefinalUnifiedDiffLineNEW_FILE_MODE =newUnifiedDiffLine(true,"^new\\sfile\\smode\\s(\\d+)",this::processNewFileMode);
5656

5757
privatefinalUnifiedDiffLineDELETED_FILE_MODE =newUnifiedDiffLine(true,"^deleted\\sfile\\smode\\s(\\d+)",this::processDeletedFileMode);
58-
58+
privatefinalUnifiedDiffLineOLD_MODE =newUnifiedDiffLine(true,"^old\\smode\\s(\\d+)",this::processOldMode);
59+
privatefinalUnifiedDiffLineNEW_MODE =newUnifiedDiffLine(true,"^new\\smode\\s(\\d+)",this::processNewMode);
60+
privatefinalUnifiedDiffLineBINARY_ADDED =newUnifiedDiffLine(true,"^Binary\\sfiles\\s/dev/null\\sand\\sb/(.+)\\sdiffer",this::processBinaryAdded);
61+
privatefinalUnifiedDiffLineBINARY_DELETED =newUnifiedDiffLine(true,"^Binary\\sfiles\\sa/(.+)\\sand\\s/dev/null\\sdiffer",this::processBinaryDeleted);
62+
privatefinalUnifiedDiffLineBINARY_EDITED =newUnifiedDiffLine(true,"^Binary\\sfiles\\sa/(.+)\\sand\\sb/(.+)\\sdiffer",this::processBinaryEdited);
5963
privatefinalUnifiedDiffLineCHUNK =newUnifiedDiffLine(false,UNIFIED_DIFF_CHUNK_REGEXP,this::processChunk);
6064
privatefinalUnifiedDiffLineLINE_NORMAL =newUnifiedDiffLine("^\\s",this::processNormalLine);
6165
privatefinalUnifiedDiffLineLINE_DEL =newUnifiedDiffLine("^-",this::processDelLine);
@@ -99,8 +103,10 @@ private UnifiedDiff parse() throws IOException, UnifiedDiffParserException {
99103
if (validLine(line,DIFF_COMMAND,SIMILARITY_INDEX,INDEX,
100104
FROM_FILE,TO_FILE,
101105
RENAME_FROM,RENAME_TO,
102-
NEW_FILE_MODE,DELETED_FILE_MODE,
103-
CHUNK)) {
106+
NEW_FILE_MODE,DELETED_FILE_MODE,
107+
OLD_MODE,NEW_MODE,
108+
BINARY_ADDED,BINARY_DELETED,
109+
BINARY_EDITED,CHUNK)) {
104110
break;
105111
}else {
106112
headerTxt +=line +"\n";
@@ -116,7 +122,10 @@ private UnifiedDiff parse() throws IOException, UnifiedDiffParserException {
116122
if (!processLine(line,DIFF_COMMAND,SIMILARITY_INDEX,INDEX,
117123
FROM_FILE,TO_FILE,
118124
RENAME_FROM,RENAME_TO,
119-
NEW_FILE_MODE,DELETED_FILE_MODE)) {
125+
NEW_FILE_MODE,DELETED_FILE_MODE,
126+
OLD_MODE,NEW_MODE,
127+
BINARY_ADDED ,BINARY_DELETED,
128+
BINARY_EDITED)) {
120129
thrownewUnifiedDiffParserException("expected file start line not found");
121130
}
122131
line =READER.readLine();
@@ -346,6 +355,26 @@ private void processDeletedFileMode(MatchResult match, String line) {
346355
actualFile.setDeletedFileMode(match.group(1));
347356
}
348357

358+
privatevoidprocessOldMode(MatchResultmatch,Stringline) {
359+
actualFile.setOldMode(match.group(1));
360+
}
361+
362+
privatevoidprocessNewMode(MatchResultmatch,Stringline) {
363+
actualFile.setNewMode(match.group(1));
364+
}
365+
366+
privatevoidprocessBinaryAdded(MatchResultmatch,Stringline) {
367+
actualFile.setBinaryAdded(match.group(1));
368+
}
369+
370+
privatevoidprocessBinaryDeleted(MatchResultmatch,Stringline) {
371+
actualFile.setBinaryDeleted(match.group(1));
372+
}
373+
374+
privatevoidprocessBinaryEdited(MatchResultmatch,Stringline) {
375+
actualFile.setBinaryEdited(match.group(1));
376+
}
377+
349378
privateStringextractFileName(String_line) {
350379
Matchermatcher =TIMESTAMP_REGEXP.matcher(_line);
351380
Stringline =_line;

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,4 +394,45 @@ public void testParseIssue141() throws IOException {
394394
assertThat(file1.getFromFile()).isEqualTo("a.txt");
395395
assertThat(file1.getToFile()).isEqualTo("a1.txt");
396396
}
397+
398+
@Test
399+
publicvoidtestParseIssue182_add()throwsIOException {
400+
UnifiedDiffdiff =UnifiedDiffReader.parseUnifiedDiff(
401+
UnifiedDiffReaderTest.class.getResourceAsStream("problem_diff_issue182_add.diff"));
402+
403+
UnifiedDiffFilefile1 =diff.getFiles().get(0);
404+
405+
assertThat(file1.getBinaryAdded()).isEqualTo("some-image.png");
406+
}
407+
408+
@Test
409+
publicvoidtestParseIssue182_delete()throwsIOException {
410+
UnifiedDiffdiff =UnifiedDiffReader.parseUnifiedDiff(
411+
UnifiedDiffReaderTest.class.getResourceAsStream("problem_diff_issue182_delete.diff"));
412+
413+
UnifiedDiffFilefile1 =diff.getFiles().get(0);
414+
415+
assertThat(file1.getBinaryDeleted()).isEqualTo("some-image.png");
416+
}
417+
418+
@Test
419+
publicvoidtestParseIssue182_edit()throwsIOException {
420+
UnifiedDiffdiff =UnifiedDiffReader.parseUnifiedDiff(
421+
UnifiedDiffReaderTest.class.getResourceAsStream("problem_diff_issue182_edit.diff"));
422+
423+
UnifiedDiffFilefile1 =diff.getFiles().get(0);
424+
425+
assertThat(file1.getBinaryEdited()).isEqualTo("some-image.png");
426+
}
427+
428+
@Test
429+
publicvoidtestParseIssue182_mode()throwsIOException {
430+
UnifiedDiffdiff =UnifiedDiffReader.parseUnifiedDiff(
431+
UnifiedDiffReaderTest.class.getResourceAsStream("problem_diff_issue182_mode.diff"));
432+
433+
UnifiedDiffFilefile1 =diff.getFiles().get(0);
434+
435+
assertThat(file1.getOldMode()).isEqualTo("100644");
436+
assertThat(file1.getNewMode()).isEqualTo("100755");
437+
}
397438
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
diff --git a/some-image.png b/some-image.png
2+
new file mode 100644
3+
index 0000000..bc3b5b4
4+
Binary files /dev/null and b/some-image.png differ
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
diff --git a/some-image.png b/some-image.png
2+
deleted file mode 100644
3+
index 0e68078..0000000
4+
Binary files a/some-image.png and /dev/null differ
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
diff --git a/some-image.png b/some-image.png
2+
index bc3b5b4..0e68078 100644
3+
Binary files a/some-image.png and b/some-image.png differ
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
diff --git a/some-image.png b/some-image.png
2+
old mode 100644
3+
new mode 100755

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp