nantitv:
それはのフォローアップの質問です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();
}
}
したがって、私は、作成するために強制的にDIffFormatter
すべての差分エントリについて。
作成するためのより良い方法があるList<String> from List<DiffEntry>
新しい作成せずにDiffFormatter
、すべての時間は?
リュディガーハーマン:
追加取得以前のエントリの原因は、同じ出力ストリームが使用されていることです。呼び出しoutputStream.toString()
これまでに書き込まれたすべてのバイトの文字列を返します。したがって、各呼び出しtoString
forループ内では、すべての以前に作成された差分に加え、現在の1を返します。
私はこの問題を解決するための二つの方法を参照してください。
別々に使用し
DiffFormatter
、各差分エントリのforループの中に。カスタム実装
OutputStream
以前に書かれた内容を破棄することができます。