今回使うレポジトリの状況です。
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$
コマンドが長すぎますね。
コメント