rcsを使う(その7)


アニメ『デビルズライン』

なんだか悲しいですねえ。吸血鬼に生まれたばっかりに、可哀想な生き方をする人ばかりです。衝動に駆られるとつらいでしょうねえ。そんなことを考えながら、ハラハラ見ています。面白いのだけどつらそうなのを見てるのもつらいので、ストレスがたまるアニメかもしれない。

rcsの自作をしながら、rcsコマンドを覚えていますが、今回は、その7です。

rcs logのヘッダ部分の selected revisionsの表示は、-rオプションで指定したレビジョンの数っぽいですが、本家のコマンドをいろいろ叩いて確認してみます。

-rでレビジョンを指定できますが、1つだけ指定すると、

takk@deb9:~/tmp$ rcs log -r1.1 test.c

RCS file: RCS/test.c,v
Working file: test.c
head: 1.3
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 3;	selected revisions: 1
description:
TEST
----------------------------
revision 1.1
date: 2018/09/12 11:49:34;  author: takk;  state: Exp;
Initial revision
=============================================================================
takk@deb9:~/tmp$ 

このようにselected revisionsが、1になります。

-rオプションは、,:-などで区切って2つレビジョンを指定することができます。

1.1と、1.3のレビジョンを得たい場合は、-r1.1,1.3と指定します。

takk@deb9:~/tmp$ rcs log -r1.1,1.3 test.c

RCS file: RCS/test.c,v
Working file: test.c
head: 1.3
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 3;	selected revisions: 2
description:
TEST
----------------------------
revision 1.3
date: 2018/09/13 11:00:44;  author: takk;  state: Exp;  lines: +3 -1
TEST
----------------------------
revision 1.1
date: 2018/09/12 11:49:34;  author: takk;  state: Exp;
Initial revision
=============================================================================
takk@deb9:~/tmp$

1.1~1.3、つまり1.1、1,2、1.3を指定したい時は、r1.1:1.3、もしくは、r1.1-1.3というように指定します。

takk@deb9:~/tmp$ rcs log -r1.1:1.3 test.c

RCS file: RCS/test.c,v
Working file: test.c
head: 1.3
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 3;	selected revisions: 3
description:
TEST
----------------------------
revision 1.3
date: 2018/09/13 11:00:44;  author: takk;  state: Exp;  lines: +3 -1
TEST
----------------------------
revision 1.2
date: 2018/09/12 11:58:02;  author: takk;  state: Exp;  lines: +2 -0
2nd Check in
----------------------------
revision 1.1
date: 2018/09/12 11:49:34;  author: takk;  state: Exp;
Initial revision
=============================================================================
takk@deb9:~/tmp$ 

では、自作のrcsコマンドをレビジョン1.1と1.3を指定してlogを表示するスクリプトに改造してみます。
3行目が追加箇所です。

     1	$working_file = $ARGV[0];
     2	$rcs_file = "./RCS/$working_file,v";
     3	@target_rev = ("1.1","1.3"); $n=$#target_rev+1;
     4	open(IN,"<$rcs_file");

selected revisionsには、さきほど追加した変数$nの値を表示するようにしておきます。

    50  print <<EOL;
    51
    52  RCS file: $rcs_file
    53  Working file: $working_file
    54  head: $head
    55  branch:
    56  locks: $locks
    57  access list:
    58  symbolic names:
    59  keyword substitution:
    60  total revisions: $total_revision;       selected revisions: $n
    61  description:
    62
    63  EOL

次は各レビジョンログの表示部分。
67、68、77行目で、該当するレビジョンではないとスキップ(next)する処理を追加しました。

    64	foreach(@all){
    65		my $rev = $_;
    66		
    67		foreach(@target_rev){
    68		next unless(/$rev/);
    69		my $line = $hist{$rev};
    70		my ($tmp,$date,$log) = split /:SEP:/,$line;
    71	
    72		print "----------------------------\n";
    73	
    74		print"revision $rev\n";
    75		print"$date\n";
    76		print"$log\n";
    77		}
    78	}

改造後の自作rcsを使ってみます。

takk@deb9:~/tmp$ perl my-rcs.pl test.c

RCS file: ./RCS/test.c,v
Working file: test.c
head: 1.3 
branch:
locks: strict
access list:
symbolic names:
keyword substitution:
total revisions: 3;	selected revisions: 2
description:

----------------------------
revision 1.3
date	2018.09.13.11.00.44;	author takk;	state Exp;
TEST
----------------------------
revision 1.1
date	2018.09.12.11.49.34;	author takk;	state Exp;
Initial revision
=============================================================================
takk@deb9:~/tmp$