diff --git a/src/main/java/uk/ac/cam/cl/dtg/teaching/chime/app/SideBySideDiffFormatter.java b/src/main/java/uk/ac/cam/cl/dtg/teaching/chime/app/SideBySideDiffFormatter.java index 926c69cc8ecbb39084dfbd086e54f5287779de46..e2e59a923ec3a49d4a8f0ca881cfb63eed1c3d53 100644 --- a/src/main/java/uk/ac/cam/cl/dtg/teaching/chime/app/SideBySideDiffFormatter.java +++ b/src/main/java/uk/ac/cam/cl/dtg/teaching/chime/app/SideBySideDiffFormatter.java @@ -7,7 +7,9 @@ import com.google.common.collect.ImmutableSet; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffFormatter; import org.eclipse.jgit.diff.RawText; @@ -95,7 +97,7 @@ public class SideBySideDiffFormatter extends DiffFormatter { } private ImmutableSet<Integer> markLinesInScope(List<DiffRow> rows) { - ImmutableSet.Builder<Integer> indices = ImmutableSet.builder(); + Set<Integer> indices = new HashSet<>(); int i = 0; for (DiffRow row : rows) { if (!row.getOldLine().equals(row.getNewLine())) { @@ -105,7 +107,14 @@ public class SideBySideDiffFormatter extends DiffFormatter { } i++; } - return indices.build(); + // If a line is skipped and the lines either side of it are included then we might as well + // include this line since it will take that much space just to show it. + for (int j = 0; j < i; j++) { + if (!indices.contains(j) && indices.contains(j - 1) && indices.contains(j + 1)) { + indices.add(j); + } + } + return ImmutableSet.copyOf(indices); } private static ImmutableList<String> lines(RawText a) {