終わりのセラフPV2 / Seraph of the End Official Trailer 2
アニメ『終わりのセラフ』(2015)
吸血鬼アニメです。敵対する立場になっても互いの友情は変わらない。友情と立場のジレンマが見てて辛いのですが、面白いところでもあります。日本帝鬼軍側の女子キャラはすごく可愛いのですが、吸血鬼勢を見ると美男子で女性向けなんだろうかとも思えます。両方に受けるようにしてるのでしょうか。
rcsの管理ファイルを解析して、rcs log表示ができるようにスクリプトを変更してみます。
変更前スクリプト。
takk@deb9:~/tmp$ cat -n my-rcs.pl 1 open(IN,"<RCS/$ARGV[0],v"); 2 while(<IN>){ 3 chomp; 4 if(/^head\t(\d+\.\d+);/){ 5 $head = $1; 6 next; 7 } 8 if(/^(\d+\.\d+)$/){ 9 $rev = $1; 10 next; 11 } 12 if(/^(date\t\d\d\d\d\..*)$/){ 13 $date = $1; 14 if($rev eq $head){ 15 print "$date\n"; 16 } 17 } 18 19 } 20 close(IN); takk@deb9:~/tmp$
すぐにprintせずに、ハッシュ変数に格納してから後でsplitで取り出すように修正。普通に使われる文字を区切り文字にしてしまわないように、特殊な文字列(:SEP:)を決めておいて、それをで区切り文字列とします。
12 if(/^(date\t\d\d\d\d\..*)$/){ 13 $date = $1; 14 $hist{$rev} .= ":SEP:" . $date; 15 next; 16 }
logの部分は、複数行あるので、状態変数を使って処理します。
17 if(/^log$/){ 18 $sts = "log-start"; 19 next; 20 } 21 if($sts eq "log-start"){ 22 if(/^\@/){ 23 s/^\@//; 24 $hist{$rev} .= ":SEP:" . $_; 25 $sts = "log"; 26 } 27 next; 28 } 29 if($sts eq "log"){ 30 if(/\@$/){ 31 s/\@$//; 32 $hist{$rev} .= $_ . ":SEP:"; 33 $sts = ""; 34 next; 35 } 36 $hist{$rev} .= $_; 37 }
あとは、これに全ハッシュをソートして一つずつsplitする処理をすればできあがり。
使ってみます。
takk@deb9:~/tmp$ perl my-rcs.pl test.c ---------------------------- revision 1.1 date 2018.09.12.11.49.34; author takk; state Exp; Initial revision ---------------------------- revision 1.2 date 2018.09.12.11.58.02; author takk; state Exp; 2nd Check in ---------------------------- revision 1.3 date 2018.09.13.11.00.44; author takk; state Exp; TEST ============================================================================= takk@deb9:~/tmp$
ん~。revisionがさかさまに表示している気がしますが。まあいいか。
修正後の全ソースです。
1 open(IN,"<RCS/$ARGV[0],v"); 2 while(<IN>){ 3 chomp; 4 if(/^head\t(\d+\.\d+);/){ 5 $head = $1; 6 next; 7 } 8 if(/^(\d+\.\d+)$/){ 9 $rev = $1; 10 next; 11 } 12 if(/^(date\t\d\d\d\d\..*)$/){ 13 $date = $1; 14 $hist{$rev} .= ":SEP:" . $date; 15 next; 16 } 17 if(/^log$/){ 18 $sts = "log-start"; 19 next; 20 } 21 if($sts eq "log-start"){ 22 if(/^\@/){ 23 s/^\@//; 24 $hist{$rev} .= ":SEP:" . $_; 25 $sts = "log"; 26 } 27 next; 28 } 29 if($sts eq "log"){ 30 if(/\@$/){ 31 s/\@$//; 32 $hist{$rev} .= $_ . ":SEP:"; 33 $sts = ""; 34 next; 35 } 36 $hist{$rev} .= $_; 37 } 38 } 39 close(IN); 40 41 @all = sort keys %hist; 42 foreach(@all){ 43 my $rev = $_; 44 my $line = $hist{$rev}; 45 my ($tmp,$date,$log) = split /:SEP:/,$line; 46 47 print "----------------------------\n"; 48 49 print"revision $rev\n"; 50 print"$date\n"; 51 print"$log\n"; 52 } 53 print"=============================================================================\n"; 54 55
コメント