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

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

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

  1. Great article, show me more!

  2. I am regular visitor, how are you everybody?
    This piece of writing posted at this web site is genuinely pleasant.

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA