diff --git a/__test__/create-or-update-branch.int.test.ts b/__test__/create-or-update-branch.int.test.ts index 9303e54..276b54b 100644 --- a/__test__/create-or-update-branch.int.test.ts +++ b/__test__/create-or-update-branch.int.test.ts @@ -250,11 +250,15 @@ describe('create-or-update-branch tests', () => { expect(branchCommits.length).toEqual(1) expect(branchCommits[0].subject).toEqual('Test changes') expect(branchCommits[0].changes.length).toEqual(3) - expect(branchCommits[0].changes).toEqual([ - {mode: '100755', path: UNTRACKED_EXE_FILE, status: 'A'}, - {mode: '100644', path: TRACKED_FILE, status: 'M'}, - {mode: '100644', path: UNTRACKED_FILE, status: 'A'} - ]) + expect(branchCommits[0].changes[0].mode).toEqual('100755') + expect(branchCommits[0].changes[0].path).toEqual(UNTRACKED_EXE_FILE) + expect(branchCommits[0].changes[0].status).toEqual('A') + expect(branchCommits[0].changes[1].mode).toEqual('100644') + expect(branchCommits[0].changes[1].path).toEqual(TRACKED_FILE) + expect(branchCommits[0].changes[1].status).toEqual('M') + expect(branchCommits[0].changes[2].mode).toEqual('100644') + expect(branchCommits[0].changes[2].path).toEqual(UNTRACKED_FILE) + expect(branchCommits[0].changes[2].status).toEqual('A') }) it('tests buildBranchCommits with addition and deletion', async () => { @@ -272,11 +276,15 @@ describe('create-or-update-branch tests', () => { expect(branchCommits.length).toEqual(1) expect(branchCommits[0].subject).toEqual('Test changes') expect(branchCommits[0].changes.length).toEqual(3) - expect(branchCommits[0].changes).toEqual([ - {mode: '100644', path: TRACKED_FILE, status: 'D'}, - {mode: '100644', path: UNTRACKED_FILE, status: 'A'}, - {mode: '100644', path: TRACKED_FILE_NEW_PATH, status: 'A'} - ]) + expect(branchCommits[0].changes[0].mode).toEqual('100644') + expect(branchCommits[0].changes[0].path).toEqual(TRACKED_FILE) + expect(branchCommits[0].changes[0].status).toEqual('D') + expect(branchCommits[0].changes[1].mode).toEqual('100644') + expect(branchCommits[0].changes[1].path).toEqual(UNTRACKED_FILE) + expect(branchCommits[0].changes[1].status).toEqual('A') + expect(branchCommits[0].changes[2].mode).toEqual('100644') + expect(branchCommits[0].changes[2].path).toEqual(TRACKED_FILE_NEW_PATH) + expect(branchCommits[0].changes[2].status).toEqual('A') }) it('tests buildBranchCommits with multiple commits', async () => { @@ -294,10 +302,13 @@ describe('create-or-update-branch tests', () => { expect(branchCommits[i].subject).toEqual(`Test changes ${i}`) expect(branchCommits[i].changes.length).toEqual(2) const untrackedFileStatus = i == 0 ? 'A' : 'M' - expect(branchCommits[i].changes).toEqual([ - {mode: '100644', path: TRACKED_FILE, status: 'M'}, - {mode: '100644', path: UNTRACKED_FILE, status: untrackedFileStatus} - ]) + + expect(branchCommits[i].changes[0].mode).toEqual('100644') + expect(branchCommits[i].changes[0].path).toEqual(TRACKED_FILE) + expect(branchCommits[i].changes[0].status).toEqual('M') + expect(branchCommits[i].changes[1].mode).toEqual('100644') + expect(branchCommits[i].changes[1].path).toEqual(UNTRACKED_FILE) + expect(branchCommits[i].changes[1].status).toEqual(untrackedFileStatus) } }) diff --git a/__test__/git-command-manager.int.test.ts b/__test__/git-command-manager.int.test.ts index 33304a4..415637c 100644 --- a/__test__/git-command-manager.int.test.ts +++ b/__test__/git-command-manager.int.test.ts @@ -18,9 +18,9 @@ describe('git-command-manager integration tests', () => { expect(initialCommit.subject).toEqual('initial commit') expect(initialCommit.signed).toBeFalsy() - expect(initialCommit.changes).toEqual([ - {mode: '100644', status: 'A', path: 'README_TEMP.md'} - ]) + expect(initialCommit.changes[0].mode).toEqual('100644') + expect(initialCommit.changes[0].status).toEqual('A') + expect(initialCommit.changes[0].path).toEqual('README_TEMP.md') expect(emptyCommit.subject).toEqual('empty commit for tests') expect(emptyCommit.tree).toEqual(initialCommit.tree) // empty commits have no tree and reference the parent's @@ -31,16 +31,18 @@ describe('git-command-manager integration tests', () => { expect(modifiedCommit.subject).toEqual('add sparkles') expect(modifiedCommit.parents[0]).toEqual(emptyCommit.sha) expect(modifiedCommit.signed).toBeFalsy() - expect(modifiedCommit.changes).toEqual([ - {mode: '100644', status: 'M', path: 'README_TEMP.md'} - ]) + expect(modifiedCommit.changes[0].mode).toEqual('100644') + expect(modifiedCommit.changes[0].status).toEqual('M') + expect(modifiedCommit.changes[0].path).toEqual('README_TEMP.md') expect(headCommit.subject).toEqual('rename readme') expect(headCommit.parents[0]).toEqual(modifiedCommit.sha) expect(headCommit.signed).toBeFalsy() - expect(headCommit.changes).toEqual([ - {mode: '100644', status: 'A', path: 'README.md'}, - {mode: '100644', status: 'D', path: 'README_TEMP.md'} - ]) + expect(headCommit.changes[0].mode).toEqual('100644') + expect(headCommit.changes[0].status).toEqual('A') + expect(headCommit.changes[0].path).toEqual('README.md') + expect(headCommit.changes[1].mode).toEqual('100644') + expect(headCommit.changes[1].status).toEqual('D') + expect(headCommit.changes[1].path).toEqual('README_TEMP.md') }) }) diff --git a/dist/index.js b/dist/index.js index f2b3a02..1bda23f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -762,12 +762,13 @@ class GitCommandManager { subject: detailLines[4], body: detailLines.slice(5, endOfBodyIndex).join('\n'), changes: lines.slice(endOfBodyIndex + 2, -1).map(line => { - const change = line.match(/^:(\d{6}) (\d{6}) \w{40} \w{40} ([AMD])\s+(.*)$/); + const change = line.match(/^:(\d{6}) (\d{6}) \w{40} (\w{40}) ([AMD])\s+(.*)$/); if (change) { return { - mode: change[3] === 'D' ? change[1] : change[2], - status: change[3], - path: change[4] + mode: change[4] === 'D' ? change[1] : change[2], + dstSha: change[3], + status: change[4], + path: change[5] }; } else { diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index b17e1f3..7d60950 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -14,6 +14,7 @@ export type Commit = { body: string changes: { mode: string + dstSha: string status: 'A' | 'M' | 'D' path: string }[] @@ -178,13 +179,14 @@ export class GitCommandManager { body: detailLines.slice(5, endOfBodyIndex).join('\n'), changes: lines.slice(endOfBodyIndex + 2, -1).map(line => { const change = line.match( - /^:(\d{6}) (\d{6}) \w{40} \w{40} ([AMD])\s+(.*)$/ + /^:(\d{6}) (\d{6}) \w{40} (\w{40}) ([AMD])\s+(.*)$/ ) if (change) { return { - mode: change[3] === 'D' ? change[1] : change[2], - status: change[3], - path: change[4] + mode: change[4] === 'D' ? change[1] : change[2], + dstSha: change[3], + status: change[4], + path: change[5] } } else { unparsedChanges.push(line)