diff --git a/diff.js b/diff.js index 2300195..7ddddb1 100755 --- a/diff.js +++ b/diff.js @@ -27,15 +27,42 @@ module.exports = function( args, fn ) { function splitByFile( diff ) { var filename, - files = {}; + files = {}, + matches, + oldLineNum, + newLineNum; diff.split( "\n" ).forEach(function( line, i ) { if ( line.charAt( 0 ) === "d" ) { filename = line.replace( /^diff --git a\/(\S+).*$/, "$1" ); files[ filename ] = []; + oldLineNum = null; + } else if ( matches = line.match( /@@\ -[0-9]+(,[0-9]+)?\ \+([0-9]+)(,[0-9]+)?\ @@.*/ ) ) { + oldLineNum = newLineNum = matches[ 2 ]; + files[ filename ].push({ + line: line, + oldLineNum: null, + newLineNum: null + }); + } else if ( matches = line.match( /^(\[[0-9;]+m)*([\ +-])/ ) ) { + files[ filename ].push({ + line: line, + oldLineNum: oldLineNum, + newLineNum: newLineNum + }); + if ( matches[ 2 ] != '-' ) { + newLineNum++; + } + if ( matches[ 2 ] != '+' ) { + oldLineNum++; + } + } else { + files[ filename ].push({ + line: line, + oldLineNum: null, + newLineNum: null + }); } - - files[ filename ].push( line ); }); return files; diff --git a/gist-diff.js b/gist-diff.js index 1b604b2..f8353aa 100755 --- a/gist-diff.js +++ b/gist-diff.js @@ -36,7 +36,7 @@ diff( args.join( " " ), function( error, parsedDiff ) { var files = {}; for ( var file in parsedDiff ) { files[ file.replace( /\//g, "-" ) + ".diff" ] = { - content: parsedDiff[ file ].join( "\n" ) + content: parsedDiff[ file ].map(function(data) { return data.line; }).join( "\n" ) }; } diff --git a/pretty-diff.js b/pretty-diff.js index c7a95fb..3e124bf 100755 --- a/pretty-diff.js +++ b/pretty-diff.js @@ -24,9 +24,9 @@ function generatePrettyDiff( parsedDiff ) { for ( var file in parsedDiff ) { diffHtml += "
" + escape( line ) + ""; + return diff.map(function( lineData ) { + var type = lineData.line.charAt( 0 ); + return '
' + escape( lineData.line ) + '