Es una pregunta de seguimiento de jgit - git diff basado en la extensión de archivo .
Estoy tratando de añadir el formato diff a List<String>
pero si trato de usar mismo DiffFormatter
como entradas de abajo y conseguir anteriores anexan a la siguiente.
List<String> changes = new LinkedList<>();
try (OutputStream outputStream = new ByteArrayOutputStream();
DiffFormatter diffFormatter = new DiffFormatter(outputStream)) {
diffFormatter.setRepository(git1.getRepository());
TreeFilter treeFilter = PathSuffixFilter.create(".txt");
diffFormatter.setPathFilter(treeFilter);
List<DiffEntry> entries = diffFormatter.scan(newTree, oldTree);
for (DiffEntry diffEntry : entries) {
diffFormatter.format(diffEntry);
changes.add(outputStream.toString());
diffFormatter.flush();
}
}
Por lo tanto, obligado a crear una DIffFormatter
para cada entrada diff.
¿Hay una mejor manera de crear List<String> from List<DiffEntry>
sin necesidad de crear una nueva DiffFormatter
cada vez?
La causa de las entradas anteriores conseguir adjuntas es que se utiliza la misma secuencia de salida. Llamando outputStream.toString()
devuelve una cadena de todos los bytes que se han escrito hasta ahora. De ahí que cada llamada toString
dentro del bucle devolverá todos los diffs creados anteriormente, además de la actual.
Veo dos formas de resolver este problema:
Utilice una separada
DiffFormatter
dentro del bucle para cada entrada de diff.Implementar una costumbre
OutputStream
que permite descartar contenido escrito anteriormente.