各レビジョンの変更行数を取得する(svn)

9-2.バージョン管理

変更行数を確認します。行が増えた箇所は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と一致したので、合ってそうです。

コメント

タイトルとURLをコピーしました