Subversionで管理しているファイルを、どこかのタイミングである修正をしていて、キーワードは覚えているんだけど、いつ修正したのか思い出せない(この変数、いつ追加されたんだ?とか)、なんてこと、よくありますよね(ふつーはねーよ、そんなこと。コミットコメントを見れば大体分かるんだよ、ふつーは(以下自粛(謎)))‥
‥っと、気を取り直して、そんなとき、一つ一つ履歴を追っていたのではとてもじゃないが気が滅入るし時間も足りない。
そんなわけで、ざっくりとシェルスクリプトを書いてみた。
#! /bin/bash
# 調査したいファイル/ディレクトリへのパス
svn_repo=http://svn.example.com/repo/hoge/trunk/hoge/fuga/BoeBoe.java
# キーワード
keyword=someVariable
unset pre
for rev in $(svn log ${svn_repo} | grep '^r[0-9][0-9]* ' | awk '{print substr($1, 2);}')
do
if [ "x${pre}" != "x" ]; then
echo "${rev}<==>${pre}"
svn diff -r ${rev}:${pre} ${svn_repo} | grep ${keyword}
fi
pre=${rev}
doneざっとこんな感じ。
やってることはすごく単純で、対象のファイル/ディレクトリが関連したリビジョン番号を全部抜き出して、前のリビジョンとの差分を一つずつ出力しているだけ。
「grep ${keyword}」の部分は好きなように抽出コマンドを書けばいいし、応用はいくらか考えられるかも。
まぁ、ふつーは、こんなものが役に立たない世の中が幸せなんですけどね(謎)。