svnからリビジョン毎/ファイル毎の変更ステップ数をカウント

対象ユーザーを引数で指定して使う。
処理としては『 ログ取得 -> 対象ユーザーがコミットしたリビジョン番号だけを取得 -> 取得したリビジョンで変更ファイル一覧を取得 -> 変更ファイルを前のリビジョンとdiffして変更ステップ数を取得(追加ファイルの場合はファイル全体のステップ数を使う)』といった流れ。

リポジトリを取得する場所は間違っているかもシレナイ。

--------------------------------------------------------------------------------
#!/bin/sh
#svnanalyze.sh
#対象ユーザーは引数で指定
if test $# = 1; then
USER=$1

#リポジトリを取得
repository=`cat ./.svn/entries | sed -n '6p'`

#変更ファイル一覧を取得
log=`svn log -q | grep -oP '(?<=^r)\d*(?=.*'$USER')' | sort -n | awk '{print "svn log -v -r "$0}' | sh | grep -oP '((?<=^r)\d*.*|^ [AM].*\.(?m)(c|h|dep)\r$)' | awk 'BEGIN{OFS=","}{if("|"==$2){rev=$1;mod=$3;date=$5}else{print 'date','rev','mod',$1,"'$repository'"$2}}'`
echo "Date,Revision,Name,Type,File,Add line,Del line"
for i in $log
do
type=`echo $i | cut -d, -f 4`
if test "M" = $type; then
#変更ファイル
diff=`echo $i | awk 'BEGIN{FS=","}{print "svn diff -r "($2-1)":"$2,$5}' | sh`
add=`echo "$diff" | grep -cP '^\+'`-1
del=`echo "$diff" | grep -cP '^\-'`-1
else
#追加ファイル
add=`echo $i | awk 'BEGIN{FS=","}{print "svn cat -r "$2,$5}' | sh | wc -l`
del=0
fi
echo $i | awk 'BEGIN{OFS=","}{print $0,'$add',"-"'$del'}'
done
fi
--------------------------------------------------------------------------------

0 Comments:

Post a Comment