TortoiseSVNで管理しているバイナリファイルの差分を取るために差分viewerを適当に書いてみたのでメモを残しておきます。
概要
- TortoiseSVNの差分viewerをRubyで書いて、Exerbで実行ファイル化した。
- バイナリファイルを一旦テキストにしてから比較する。
- 差分の表示自体はWinMergeに丸投げ。
スクリプト
Rubyで以下のようなスクリプトを書きました。以下のスクリプトは実際に動かしたものではありませんので、うまく動かなかったらごめんなさい。
xxx_diff.rb
def xxx_to_str(file)
# バイナリファイル file の内容を文字列にして返すようなことを書く。
end
require 'tempfile'
a = Tempfile.new("a_")
b = Tempfile.new("b_")
begin
a.write(xxx_to_str(ARGV[0]))
b.write(xxx_to_str(ARGV[1]))
a.close
b.close
system "C:/Program Files/WinMerge/WinMergeU.exe", a.path, b.path
ensure
a.close!
b.close!
end
スクリプトの実行ファイル化
幾つか方法があると思いますが、私はExerbを使いました。
> ruby -rexerb/mkexy xxx_diff.rb
(エラーが出るが省略)
> exerb xxx_diff.exy
これで xxx_diff.exe
が出来上がります。
TortoiseSVNの設定
TortoiseSVNの設定ダイアログから「外部プログラム > 差分ビューアー」の「高度な設定」ボタンを押して、差分の高度な設定ダイアログにて拡張子と先ほどの xxx_diff.exe
を設定します。引数は不要です。
試す
あとはExplorer上のバイナリファイルのアイコンから差分表示を呼び出したり、ログから差分を表示したりすればいいと思います。