java - JGit - 如何重用 DiffFormatter

标签 java jgit

这是jgit - git diff based on file extension的后续问题.

我正在尝试将格式化的差异添加到 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();
                }
            }

因此我被迫创建一个 DIffFormatter对于每个差异条目。

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

最佳答案

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

我看到了解决这个问题的两种方法:

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

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

关于java - JGit - 如何重用 DiffFormatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019259/

相关文章:

java - Jar 资源中的 Unicode

github - Netbeans JGit github 密码验证已弃用,。如何重置?

java - JGit 连接被拒绝

java - 使用 jGit 将文件推送到远程仓库

gitlab - 不允许使用 JGIT 的 git-upload-pack

java - 显示具有两个面板的 GUI,每个面板包含三个按钮

java - 如何传递命令行参数?

java - 相当于 Java MessageDigest 的 Shell 脚本

java - 无法将库添加到 Eclipse 中的 xtext 项目(返回错误)

git - 如何在不克隆 GITHUB 的情况下查找 Git 存储库的修订 ID