JGitを研究で使わなきゃならなくなった。
これでgit log -p
を再現するのがえらい時間がかかったのでメモ。
一部EGitのソースを流用してる。
以下のcheckGitInfo()
を実行するとこんな感じで取得が可能である。
.gitignore MODIFY old *.csv *.xml new *.tsv
ソースコード中のprojectPath
はGitリポジトリがあるファイルのString型パス。
流れとしては、
- Gitのリポジトリをプロジェクトパスを指定して取得。
- LogCommandによってlogのイテレータを取得(返り値は
Iterable
) - 取得したイテレータから前のやつと後のやつのペアを取るようにループを回す。(この時参照渡しに注意。)
- リポジトリをセットしたDiffFormatterのscanメソッドを用いて前のヤツと後のヤツの差分情報(DiffEntryオブジェクトで保存)のリストを取る
- DiffEntryオブジェクトから、差分の行数を保存しているEditオブジェクトのリストを取得する
- 同じくDiffEntryオブジェクトから新旧のテキストをRawTextオブジェクトとして取得。
と言った感じ。