rcsコマンド学習、続きです。
今回は、
-r1.1:1.5
と指定した時に、内部で、
1.1
1.2
1.3
1.4
1.5
のレビジョンに、展開する処理を作ろうと思います。
まずは取り込み部分。2行目~7行目です。
takk@deb9:~/tmp$ cat -n my-rcs.pl | head -15 1 foreach(@ARGV){ 2 if(/-r(\d+\.\d+):(\d+\.\d+)\b/){ 3 $begin=$1; $end=$2; 4 print "begin=$begin\n"; 5 print "end=$end\n"; 6 next; 7 } 8 if(/-r(\d+\.\d+(?:\,\d+\.\d+)*)\b/){ 9 @target_rev = split /,/,$1; 10 print "@target_rev\n"; 11 next; 12 } 13 } 14 15 exit 0; takk@deb9:~/tmp$
確認します。
takk@deb9:~/tmp$ perl my-rcs.pl -r1.1:1.5 begin=1.1 end=1.5 takk@deb9:~/tmp$
-rオプションのパラメータ取り込みが特に問題ありませんね。
次は、内部で連番のレビジョンの生成する仕組み。
ん~、単純に考えると、0.1ずつ足していけばいいような。。。
takk@deb9:~/tmp$ cat -n my-rcs.pl | head -18 1 foreach(@ARGV){ 2 if(/-r(\d+\.\d+):(\d+\.\d+)\b/){ 3 $begin=$1; $end=$2; 4 print "begin=$begin\n"; 5 print "end=$end\n"; 6 for($i=$begin; $i <= $end; $i += 0.1){ 7 print "-->$i\n"; 8 } 9 next; 10 } 11 if(/-r(\d+\.\d+(?:\,\d+\.\d+)*)\b/){ 12 @target_rev = split /,/,$1; 13 print "@target_rev\n"; 14 next; 15 } 16 } 17 18 exit 0; takk@deb9:~/tmp$
使ってみます。
takk@deb9:~/tmp$ perl my-rcs.pl -r1.1:1.5 begin=1.1 end=1.5 -->1.1 -->1.2 -->1.3 -->1.4 takk@deb9:~/tmp$
あれ? おかしいです。1.5が生成されていません。
桁落ちしてるのかも。0.01足した値で指定してみます。
takk@deb9:~/tmp$ perl my-rcs.pl -r1.1:1.51 begin=1.1 end=1.51 -->1.1 -->1.2 -->1.3 -->1.4 -->1.5 takk@deb9:~/tmp$
できました。
ん? まてよ。
0.1ずつ足していくと、1.9の次は2.0になるのでは?
レビジョンってそんな仕組みだったでしょうか。
1.9の次は、2.0が正解なのか、1.10が正解なのか
test.cのレビジョンを1.9まであげて、さらにチェックインしてみたいと思います。
takk@deb9:~/tmp$ rcs co test.c RCS/test.c,v --> test.c revision 1.9 done takk@deb9:~/tmp$ rcs -l test.c RCS file: RCS/test.c,v 1.9 locked done takk@deb9:~/tmp$ chmod 644 test.c takk@deb9:~/tmp$ vi test.c ~編集内容は省略~ takk@deb9:~/tmp$ rcs ci test.c RCS/test.c,v <-- test.c new revision: 1.10; previous revision: 1.9 enter log message, terminated with single '.' or end of file: >> HELLO10 >> . done takk@deb9:~/tmp$
1.9の次は1.10でした。
なので、0.1ずつ足していくのは間違いでした。
はて、どうやったら、範囲で指定されたレビジョンから個別のレビジョンを生成することができるでしょう。
次回へ
コメント