function _computeDiffChunks(oldText, newText, isWhitespaceIgnored) { var JsDiff = require('diff'); // If the last line has changes, JsDiff doesn't return that. // Generally, content with new line ending are easier to calculate offsets for. if (oldText[oldText.length - 1] !== '\n' || newText[newText.length - 1] !== '\n') { oldText += '\n'; newText += '\n'; } var lineDiff; if (isWhitespaceIgnored == 'true') { lineDiff = JsDiff.diffTrimmedLines(oldText, newText); } else { lineDiff = JsDiff.diffLines(oldText, newText); } var chunks = []; var addedCount = 0; var removedCount = 0; var nextOffset = 0; var offset = 0; var addedLines = []; var removedLines = []; lineDiff.forEach( function(part) { var added = part.added, removed = part.removed, value = part.value; var count = part.count;//value.split('\n').length - 1; if (!added && !removed) { addedCount += count; removedCount += count; offset = nextOffset; nextOffset = 0; } else if (added) { addedLines.push([addedCount, addedCount+count]) addedCount += count; nextOffset += count; } else { removedLines.push([removedCount, removedCount+count]) removedCount += count; nextOffset -= count; } chunks.push({ added: added, removed: removed, value: value, count: count, offset: offset }); offset = 0; }); return { addedLines: addedLines, removedLines: removedLines, chunks: chunks, }; }
function _computeDiffChunks(oldText: string, newText: string, isWhitespaceIgnored: boolean): DiffChunk { var JsDiff = require('diff'); // If the last line has changes, JsDiff doesn't return that. // Generally, content with new line ending are easier to calculate offsets for. if (oldText[oldText.length - 1] !== '\n' || newText[newText.length - 1] !== '\n') { oldText += '\n'; newText += '\n'; } var lineDiff; if(isWhitespaceIgnored){ lineDiff = JsDiff.diffTrimmedLines(oldText, newText); } else { lineDiff = JsDiff.diffLines(oldText, newText); } var chunks = []; var addedCount = 0; var removedCount = 0; var nextOffset = 0; var offset = 0; var addedLines = []; var removedLines = []; lineDiff.forEach(part => { var {added, removed, value} = part; var count = value.split('\n').length - 1; if (!added && !removed) { addedCount += count; removedCount += count; offset = nextOffset; nextOffset = 0; } else if (added) { for (var i = 0; i < count; i++) { addedLines.push(addedCount + i); } addedCount += count; nextOffset += count; } else { for (var i = 0; i < count; i++) { removedLines.push(removedCount + i); } removedCount += count; nextOffset -= count; } chunks.push({added, removed, value, count, offset}); offset = 0; }); return {addedLines, removedLines, chunks}; }
lbm.writeHaproxyConfig(opts, function (err, data) { t.equal(null, err); var test_txt = fs.readFileSync(updConfig_out, 'utf8'); var check_txt = fs.readFileSync(updConfig_out_chk, 'utf8'); var diff = jsdiff.diffTrimmedLines(test_txt, check_txt); diff.forEach(function (part) { if (part.added) { if (! part.value.includes('log-send-hostname')) { t.equal(null, part.value); } } else if (part.removed) { if (! part.value.includes('log-send-hostname')) { t.equal(null, part.value); } } }); fs.unlinkSync(updConfig_out); t.done(); });
fs.readFile(file2, 'utf-8', function(err, file2Data) { if (err) { done(err); return; } var diffs = diff.diffTrimmedLines(file1Data, file2Data); var diffCount = 0; diffs.forEach(function(d) { if (!!d.added || !!d.removed) { console.warn('Difference found ', d); diffCount += 1; } }); if (diffCount === 0) { done(); } else { console.log(diffs); if (diffCount === 1) { done(new Error('There was a difference')); } else { done(new Error('There were ' + diffCount + ' differences')); } } });