コメントアウトの稿で差分を一望したいという話題が出ていたので、どうやって実現するかを考えて見ました。
Subversionリポジトリからデータを得る
JavaからSubversionリポジトリをいじる場合、SVNKitを用います。これはかつてJavaSVNと呼ばれていたライブラリですね。
もうひとつの選択肢としてJavaHLというのがあるようなのですが、どうも実態が掴みにくい。公式ページはどこだ…?
試して見たという人を探していたら 気の向くままに・・・ というblogが見つかりました。参考になるかも。
差分を取得する
diffなどのツールで差分比較を行う際のアルゴリズムとしてはE.W.Myers氏の論文が有名なようです。
ViViの作者がこのアルゴリズムについて 解説 しています。エディットグラフを作成し最短経路を探すということらしいですが、冗長になるのでこちらでの解説は割愛。
応用
解説では1文字単位での比較を行っていますが、ソースの場合は1行というブロックでの比較を行えばよいでしょう。
より先駆的な試みとしては構文解析木の比較なんて面白いんじゃないかと思います。
以前、私のエントリのコメント欄で構文解析木の話題が挙がったことがありますが、コンパイル前のソースではなく、プログラミング言語として解析した後の形を比較することで、表記のブレを無視してアルゴリズムに手が加わった場所だけを拾い出す比較ツールが作れそうですね。
もしくはJavaの逆コンパイラである javap を用いて、バイトコードでの比較なども面白いかもしれません。バイトコードの相違位置からソースの行数を割り出して比較対象として表示するような感じでしょうか。
そういえば資料をあさっているときに面白いものをみつけた。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200407/04070008.txt
これは…
投稿日時 : 2007年10月18日 14:28