変更行数を確認します。行が増えた箇所はadd(追加) 減った箇所はdel(削除) 行数はそのままで変更された行はmod(変更)で表してみます。
レビジョン1から最新までの変更行数をみてみます。
takk@deb8:~/a/work$ svn diff -r1 --diff-cmd /usr/bin/diff -x"-y -W80" | tac | perl -ne 'if(/ ([\|><])/){$h{$1}++;}END{printf"mod %d\nadd %d\ndel %d\n", $h{"|"},$h{">"},$h{"<"};%h=()}' mod 8 add 90 del 1 takk@deb8:~/a/work$
まとめて数えてみました。
関数単位は、関数一覧を取得する要領とほぼ同じです。
takk@deb8:~/a/work$ svn diff -r1 --diff-cmd /usr/bin/diff -x"-y -W80" | tac | perl -ne 'if(/ ([\|><])/){$h{$1}++;$f=1;}if($f == 1 and $_ =~ /^\w.*\(/){printf"mod %d\nadd %d\ndel %d\n%s", $h{"|"},$h{">"},$h{"<"},$_;%h=();$f=0}' | tac
上記を実行すると、このように表示されます。
void func_072(void) void func_072(void) del 0 add 1 mod 0 void func_073(void) void func_073(void) del 0 add 0 mod 1 (省略) void func_041(void) void func_041(void) del 0 add 0 mod 1 void func_042(void) void func_042(void) del 0 add 0 mod 1 void func_043(void) void func_043(void) del 0 add 1 mod 0
数は合っているのでしょうか。上記結果をさらにawkでフィルタリングして、addの数を算出してみましょう。
takk@deb8:~/a/work$ !! | awk '/add/{s+=$2}END{print s}' svn diff -r1 --diff-cmd /usr/bin/diff -x"-y -W80" | tac | perl -ne 'if(/ ([\|><])/){$h{$1}++;$f=1;}if($f == 1 and $_ =~ /^\w.*\(/){printf"mod %d\nadd %d\ndel %d\n%s", $h{"|"},$h{">"},$h{"<"},$_;%h=();$f=0}' | tac | awk '/add/{s+=$2}END{print s}' 90 takk@deb8:~/a/work$
最初に算出した全体のaddと一致したので、合ってそうです。
コメント