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,
  };
}
Example #2
0
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};
}
Example #3
0
    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();
    });
Example #4
0
 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'));
     }
   }
 });