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

今回使うレポジトリの状況です。

takk@deb8:~/a/work$ svn info
パス: .
Working Copy Root Path: /home/takk/a/work
URL: file:///home/takk/a/repos
Relative URL: ^/
リポジトリのルート: file:///home/takk/a/repos
リポジトリ UUID: 3a74390e-897f-40d9-97c3-4158fc9d3bdf
リビジョン: 7
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更者: takk
最終変更リビジョン: 7
最終変更日時: 2017-02-20 19:53:26 +0900 (2017年02月20日 (月))
takk@deb8:~/a/work$ 

svn diffでは下のように既に関数も含んだ差分が表示されていますが、
今回は、これを使って関数を抽出します。下のfunc_033のように、差分の後に出現する関数も余分に表示されてしまいますが、目をつぶって使います。

takk@deb8:~/a/work$ svn diff -r1 | tail
+++ func_03.c	(作業コピー)
@@ -6,7 +6,7 @@
 
 void func_032(void)
 {
-  func_033();
+  func_050();
 }
 
 void func_033(void)
takk@deb8:~/a/work$ 

svn diff結果から、空白を一つ空けて、文字で始まる行を抽出します。

takk@deb8:~/a/work$ svn diff -r1 | grep '^ \w'
 void func_072(void)
 void func_073(void)
 void func_074(void)
 void func_092(void)
 void func_093(void)
 void func_094(void)
 void func_022(void)
 void func_023(void)
 void func_032(void)
 void func_033(void)
 void func_041(void)
 void func_042(void)
 void func_043(void)
 void func_044(void)
takk@deb8:~/a/work$ 

これを、レビジョンでくるくる回します。
r2からr7までの変更関数一覧を取得してみます。

takk@deb8:~/a/work$ for i in `seq 2 7`;do echo r$i;svn diff -r`expr $i - 1`:$i | grep '^ \w' ;done
r2
 void func_032(void)
 void func_033(void)
r3
 void func_073(void)
 void func_074(void)
r4
 void func_043(void)
 void func_044(void)
r5
 void func_072(void)
r6
 void func_041(void)
 void func_042(void)
 void func_043(void)
 void func_092(void)
 void func_093(void)
 void func_094(void)
r7
 void func_022(void)
 void func_023(void)
takk@deb8:~/a/work$ 

正確ではないですが、これで各レビジョン一覧作成の理屈はわかりました。

では、変更関数を正しく取得してみます。

takk@deb8:~/a/work$ for i in `seq 2 7`;do echo r$i;svn diff -r`expr $i - 1`:$i | tac | perl -ne '$f=1 if/^[\-\+][^\-\+]/;if($_ =~ /^ \w/ and $f==1){print;$f=0}';done
r2
 void func_032(void)
r3
 void func_073(void)
r4
 void func_043(void)
r5
 void func_072(void)
r6
 void func_042(void)
 void func_041(void)
 void func_093(void)
 void func_092(void)
r7
 void func_022(void)
takk@deb8:~/a/work$ 

コマンドが長すぎますね。

Leave a Reply

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

CAPTCHA