<< 2008/02/ 1 1. 加能ガニ
2 3 4 5 6 7 1. 言語の学習とか利用とか:wtnabeの場合
8 9 1. Opensource FastLadder 設置失敗
10 11 1. 言語の学び方続報
12 13 14 15 16 1. IE7キタ
17 18 19 20 1. svnリポジトリ内のヤバげなファイルをあぶり出す方法
21 1. CSVを固定長フォーマットのテキストに変換して普通のエディタで開く
22 23 24 25 26 27 1. 生存報告
28 29 1. Rswatch なんてものを書いてみました
>>
トップ «前の日記(2008-02-16) 最新 次の日記(2008-02-21)» 編集

2008-02-20 [長年日記]

_ svnリポジトリ内のヤバげなファイルをあぶり出す方法

  • ある程度以上古くて
  • ある程度以上放置されている

ファイルをあぶり出してみた。

以下の2つのスクリプトを組み合わせて、

sh anasvn.sh | ruby warning.rb

みたいにして使う。(スクリプトの名前は適当。)閾値とかファイルの洗い出しルールは自分で勝手に書き換えてください。

読めば分かるけど必要なのは

  • svn
  • find
  • awk
  • ruby

です。CVS ? svk ? git ? RCS ? 現物合わせで適当にしてください。

確認は gawk 3.1.4, Ruby 1.8.4, svn 1.4.4 で行いました。

anasvn.sh

対象ファイル群を洗い出すための find のルールを適当に書き換える。例では

  • 実行したディレクトリ以下で
  • 拡張子 .php のファイル

をダーっと洗い出してチェックします。で、出力は

filename TAB 最初のcommit日時 TAB 変更のあった回数

という形式です。

#! /bin/sh

LANG=C

for i in `find . -name '*.php'`;
do
    svn log -q $i | awk -v filename=$i '
BEGIN {
    sum = 0;
    FS  = "|";
    OFS = "\t";
}

/^r[0-9]+ / {
    sum++;
    time = $3;
}

END {
    # time means first commit datetime
    print filename, time, sum;
}
'
done

warning.rb

TOO_OLD, TOO_FEW を適当に書き換える。

出力は上のものをそのままスルーで出します。

#! /usr/bin/env ruby

require 'time'

FS = "\t"
TOO_OLD = Time.parse( '2006-01-01' )
TOO_FEW = 5

while ( line = gets )
  arr = line.chop.split( FS )
  filename = arr[0]
  date     = Time.parse( arr[1] )
  times    = arr[2].to_i

  if ( date < TOO_OLD and times <= TOO_FEW )
    puts line
  end
end

最終的にはある程度「作った」のが古くてあんまり人の手に触れていないファイルを TSV の形式で抜き出すことができます。

これで出力されるファイルはカタいライブラリか、さもなくば見捨てられている可能性があります。

cron で回すようにすると「この子は可愛そうです、相手してあげてください」アピールになってよいかもしれない。どうだろ。