这是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/

    10-10 15:07