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
允许丢弃以前写入的内容。
这是
我正在尝试将格式化差异添加到 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
允许丢弃以前写入的内容。