終わりのセラフ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


コメント