Gitリポジトリ全体で同じスクリプトを実行する
Gitリポジトリ内のコードが全て動くかどうか気になって、こんなRakefileを書いてみました。なぜコードが動くか調べたかったかというと、"git bisect run"するとき、実行できないコードが混ざっていると混乱するからです(最後にruns, failuresに-1してるのは、失敗するのが自明なコミットが、ぼくのリポジトリ内に1つあるからです。スキップすれば良いか。。今気付いた)。
task :run do sh "git tag -d tmp" if `git tag -l`.split.member? "tmp" sh "git tag tmp" failures = 0 runs = 0 hashes = commits.keys hashes.each do |hash| begin sh "git checkout #{hash}" runs += 1 sh "<script>" rescue Exception => e puts e.message failures += 1 end end puts "%d runs, %d failures" % [runs-1, failures-1] #sh "git checkout tmp" #sh "git tag -d tmp" end def commits ret = {} `git log --reverse --format="%H,%s"`.split("\n").each do |commit| hash, subject = commit.split(",") ret[hash[0..7]] = subject end ret end