JGit - 如何重用 DiffFormatter

JGit - How to reuse the DiffFormatter

这是 的后续问题。

我正在尝试将格式化差异添加到 List<String>,但如果我尝试使用与下面相同的 DiffFormatter,那么之前的条目将附加到下一个。

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();
                }
            }

因此我被迫为每个 diff 条目创建一个 DIffFormatter

有没有更好的方法来创建 List<String> from List<DiffEntry> 而无需每次都创建新的 DiffFormatter

前面的条目被追加的原因是使用了相同的输出流。调用 outputStream.toString() returns 到目前为止已写入的所有字节的字符串。因此,for 循环中的每次调用 toString 都会 return 所有先前创建的差异,加上当前的差异。

我看到有两种方法可以解决这个问题:

  • 在 for 循环中为每个 diff 条目使用单独的 DiffFormatter

  • 实施自定义 OutputStream 允许丢弃以前写入的内容。