in common/src/main/java/org/apache/servicecomb/toolkit/common/SplitDiffFormatter.java [44:91]
public void format(List<Comparison> comparisons, String source, String dest) throws IOException {
outputFormat = "%-" + (getMaxLineSize(source) + 10) + "s";
List<String> sourceLines = readStringAsLines(source);
List<String> destLines = readStringAsLines(dest);
for (int currentIndex = 0; currentIndex < comparisons.size(); ) {
Comparison currentComparison = comparisons.get(currentIndex);
final int endIndex = findOutputEndIndex(comparisons, currentIndex);
final Comparison endComparison = comparisons.get(endIndex);
int originalBegin = (int) Math.max(0, (long) currentComparison.originalPointBegin - radius);
int destinationBegin = (int) Math.max(0, (long) currentComparison.destinationPointBegin - radius);
int originalEnd = (int) Math.min(sourceLines.size(), (long) endComparison.originalPointEnd + radius);
int destinationEnd = (int) Math.min(destLines.size(), (long) endComparison.destinationPointEnd + radius);
writeHunkHeader(originalBegin, originalEnd, destinationBegin, destinationEnd);
while (originalBegin < originalEnd || destinationBegin < destinationEnd) {
if (originalBegin < currentComparison.originalPointBegin || endIndex + 1 < currentIndex) {
writeContextLine(sourceLines, originalBegin, destLines, destinationBegin);
originalBegin++;
destinationBegin++;
} else if (originalBegin < currentComparison.originalPointEnd) {
if (destinationBegin < currentComparison.destinationPointEnd) {
writeReplaceLine(sourceLines, originalBegin, destLines, destinationBegin);
destinationBegin++;
} else {
writeRemovedLine(sourceLines, originalBegin, destLines, destinationBegin);
}
originalBegin++;
} else if (destinationBegin < currentComparison.destinationPointEnd) {
writeAddedLine(sourceLines, originalBegin, destLines, destinationBegin);
destinationBegin++;
}
if (end(currentComparison, originalBegin, destinationBegin) && ++currentIndex < comparisons.size()) {
currentComparison = comparisons.get(currentIndex);
}
}
writeLine(noNewLine);
}
}