過去のリビジョンを全て検索したい

ある日気がついたら、ソースコードから 関数 XXXX がなくなっていた!
というような場合、いつどうしてその関数が無くなったのかを調べたいですよね。


Subversionに全ての過去のソースは格納されてますが、それに対する全文検索のような機能はなさそうです。
そこで、ある1つのソースコードの全リビジョンを取り出すプログラムを作ってみました。

#!/usr/bin/env ruby

url = ARGV[0]

logs = IO.readlines("|svn log #{url}").select {|s| s =~ /^r\d+ /}

logs.reverse.each {|log| 
  log =~ /^r(\d+) /
  rev = $1
  STDERR.puts log
  puts '=' * 80 + "\n"
  puts log + "\n"
  puts IO.read("|svn cat -r #{rev} #{url}")
}

引数で指定したURLの全リビジョンのソースコードを古い順に標準出力に出力します。