JGit - ¿Cómo volver a utilizar el DiffFormatter

nantitv:

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 DiffFormattercomo 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 DIffFormatterpara cada entrada diff.

¿Hay una mejor manera de crear List<String> from List<DiffEntry>sin necesidad de crear una nueva DiffFormattercada vez?

Rüdiger Herrmann:

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 toStringdentro del bucle devolverá todos los diffs creados anteriormente, además de la actual.

Veo dos formas de resolver este problema:

  • Utilice una separada DiffFormatterdentro del bucle para cada entrada de diff.

  • Implementar una costumbre OutputStreamque permite descartar contenido escrito anteriormente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176687&siteId=1
Recomendado
Clasificación