JGit - DiffFormatterを再利用する方法

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()これまでに書き込まれたすべてのバイトの文字列を返します。したがって、各呼び出しtoStringforループ内では、すべての以前に作成された差分に加え、現在の1を返します。

私はこの問題を解決するための二つの方法を参照してください。

  • 別々に使用しDiffFormatter、各差分エントリのforループの中に。

  • カスタム実装OutputStream以前に書かれた内容を破棄することができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=176684&siteId=1
おすすめ