JGitで git log -p を再現する

JGitを研究で使わなきゃならなくなった。
これでgit log -pを再現するのがえらい時間がかかったのでメモ。
一部EGitのソースを流用してる。

以下のcheckGitInfo()を実行するとこんな感じで取得が可能である。

.gitignore MODIFY
 old 
*.csv
*.xml

 new 
*.tsv

ソースコード中のprojectPathはGitリポジトリがあるファイルのString型パス。

流れとしては、

  1. Gitのリポジトリをプロジェクトパスを指定して取得。
  2. LogCommandによってlogのイテレータを取得(返り値はIterable)
  3. 取得したイテレータから前のやつと後のやつのペアを取るようにループを回す。(この時参照渡しに注意。)
  4. リポジトリをセットしたDiffFormatterのscanメソッドを用いて前のヤツと後のヤツの差分情報(DiffEntryオブジェクトで保存)のリストを取る
  5. DiffEntryオブジェクトから、差分の行数を保存しているEditオブジェクトのリストを取得する
  6. 同じくDiffEntryオブジェクトから新旧のテキストをRawTextオブジェクトとして取得。

と言った感じ。

続きを読む