@@ -13,39 +13,33 @@ export class GitDiffParser {
1313
1414 const hunks : GitDiffHunk [ ] = [ ] ;
1515
16- let match : RegExpExecArray | null ;
17- let hunk ;
18- let currentStartStr ;
19- let currentStart ;
20- let currentCountStr ;
21- let currentCount ;
22- let previousStartStr ;
2316 let previousStart ;
24- let previousCountStr ;
2517 let previousCount ;
18+ let currentStart ;
19+ let currentCount ;
20+ let hunk ;
21+
22+ let match : RegExpExecArray | null ;
2623 do {
2724 match = unifiedDiffRegex . exec ( `${ data } \n@@` ) ;
2825 if ( match == null ) break ;
2926
30- // Stops excessive memory usage -- https://bugs.chromium.org/p/v8/issues/detail?id=2869
31- hunk = ` ${ match [ 5 ] } ` . substr ( 1 ) ;
27+ [ , previousStart , previousCount , currentStart , currentCount , hunk ] = match ;
3228
33- [ , previousStartStr , previousCountStr , currentStartStr , currentCountStr ] = match ;
34- previousStart = parseInt ( previousStartStr , 10 ) ;
35- previousCount = previousCountStr ? parseInt ( previousCountStr , 10 ) : 0 ;
36- currentStart = parseInt ( currentStartStr , 10 ) ;
37- currentCount = currentCountStr ? parseInt ( currentCountStr , 10 ) : 0 ;
29+ previousStart = Number ( previousStart ) || 0 ;
30+ currentStart = Number ( currentStart ) || 0 ;
3831
3932 hunks . push (
4033 new GitDiffHunk (
41- hunk ,
34+ // Stops excessive memory usage -- https://bugs.chromium.org/p/v8/issues/detail?id=2869
35+ ` ${ hunk } ` . substr ( 1 ) ,
4236 {
4337 start : currentStart ,
44- end : currentStart + currentCount
38+ end : currentStart + ( Number ( currentCount ) || 0 )
4539 } ,
4640 {
4741 start : previousStart ,
48- end : previousStart + previousCount
42+ end : previousStart + ( Number ( previousCount ) || 0 )
4943 }
5044 )
5145 ) ;
@@ -130,18 +124,17 @@ export class GitDiffParser {
130124
131125 const files : GitFile [ ] = [ ] ;
132126
133- let rawStatus : string ;
127+ let status : string ;
134128 let fileName : string ;
135129 let originalFileName : string ;
136- let match : RegExpExecArray | null = null ;
130+
131+ let match : RegExpExecArray | null ;
137132 do {
138133 match = nameStatusDiffRegex . exec ( data ) ;
139134 if ( match == null ) break ;
140135
141- [ , rawStatus , fileName , originalFileName ] = match ;
136+ [ , status , fileName , originalFileName ] = match ;
142137
143- // Stops excessive memory usage -- https://bugs.chromium.org/p/v8/issues/detail?id=2869
144- const status = ` ${ rawStatus } ` . substr ( 1 ) ;
145138 files . push ( {
146139 repoPath : repoPath ,
147140 status : ( status [ 0 ] !== '.' ? status [ 0 ] . trim ( ) : '?' ) as GitFileStatus ,
@@ -150,12 +143,13 @@ export class GitDiffParser {
150143 // Stops excessive memory usage -- https://bugs.chromium.org/p/v8/issues/detail?id=2869
151144 fileName : ` ${ fileName } ` . substr ( 1 ) ,
152145 // Stops excessive memory usage -- https://bugs.chromium.org/p/v8/issues/detail?id=2869
153- originalFileName : originalFileName === undefined ? undefined : ` ${ originalFileName } ` . substr ( 1 )
146+ originalFileName :
147+ originalFileName == null || originalFileName . length === 0
148+ ? undefined
149+ : ` ${ originalFileName } ` . substr ( 1 )
154150 } ) ;
155151 } while ( match != null ) ;
156152
157- if ( ! files . length ) return undefined ;
158-
159153 return files ;
160154 }
161155
@@ -173,6 +167,7 @@ export class GitDiffParser {
173167 insertions : insertions == null ? 0 : parseInt ( insertions , 10 ) ,
174168 deletions : deletions == null ? 0 : parseInt ( deletions , 10 )
175169 } ;
170+
176171 return diffShortStat ;
177172 }
178173}
0 commit comments