JGit - 如何重用DiffFormatter

nan*_*itv 6 java jgit

这是基于文件扩展名jgit-git diff的后续问题.

我试图添加格式化的差异,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();
                }
            }
Run Code Online (Sandbox Code Playgroud)

因此我被迫DIffFormatter为每个差异条目创建一个.

有没有更好的方法来创造List<String> from List<DiffEntry>而不是DiffFormatter每次都创造新的?

Rüd*_*ann 2

附加先前条目的原因是使用了相同的输出流。调用outputStream.toString()返回迄今为止已写入的所有字节的字符串。因此,toStringfor 循环中的每次调用都将返回所有先前创建的差异,以及当前的差异。

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

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

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