diff --git a/index.js b/index.js index f4a9238..4a9bc85 100644 --- a/index.js +++ b/index.js @@ -63,10 +63,11 @@ break simiLoop; case 'deleted': + case 'old': case 'new': - var leftStr = simiLine.slice(spaceIndex + 1); - if (leftStr.indexOf('file mode') === 0) { - currentInfo[infoType === 'new' ? 'newMode' : 'oldMode'] = leftStr.slice(10); + var match = / mode (\d+)/.exec(simiLine); + if (match) { + currentInfo[infoType === 'new' ? 'newMode' : 'oldMode'] = match[1]; } break; diff --git a/test/git.test.js b/test/git.test.js index 8d283f9..27f049a 100644 --- a/test/git.test.js +++ b/test/git.test.js @@ -44,6 +44,16 @@ describe("git specific tests", () => { expect(file.newMode).toBe('100644'); }); + it("should have old and new modes", () => { + const diff = parse("chmod.diff"); + const file = diff[0]; + expect(file.type).toBe("modify"); + expect(file.oldPath).toBe("a.txt"); + expect(file.newPath).toBe("a.txt"); + expect(file.oldMode).toBe('100644'); + expect(file.newMode).toBe('100755'); + }); + it("should parse filename correctly if whitespace included", () => { const diff = parse("edit-ws.diff"); const file = diff[0]; diff --git a/test/git/chmod.diff b/test/git/chmod.diff new file mode 100644 index 0000000..64d1aa4 --- /dev/null +++ b/test/git/chmod.diff @@ -0,0 +1,9 @@ +diff --git a/a.txt b/a.txt +old mode 100644 +new mode 100755 +index 7898192..7e8a165 +--- a/a.txt ++++ b/a.txt +@@ -1 +1,2 @@ + a ++a