Thursday 2 February 2006

RCS 履歴 (fj.comp.programming)



自分のソースのどの部分がどれくらい古いかを見ようと思って、RCS version を行頭に付けるってのを考えました。で、Rcs-Parser-0.02 っていう Perl module があるんで、それをちょっといじってみる。そのmodule を作った人も同じことを考えていたらしく、ほとんど undocument だが「そのもの」の関数notateを中に発見。



なんだが、地獄のように遅い.... 指定されたバージョンを取り出すだけなら、そこそこスピードなんだけど。RCS って、最新のバージョンから古いバージョンに遡ったdiff 履歴を管理しているので、「一旦、一番、古いバージョンまで再構成して、それから、逆に新しいものに辿って行く」というアルゴリズムになるらしい。それに「ずれるし」なんでだ? 短いものだと、それっぽく動くのに。



まぁ、いいや。必須なものってわけでもないし。また、後で。



ちなみに、こんな感じ。



use Rcs::Parser;

my $rcs = new Rcs::Parser;

my $ret = $rcs->load($ARGV[0]);

my $current = $rcs->recent_version;

my $note = $rcs->notate();

my $notes = $note->{$current}->{body};

my $doc = $rcs->{current_document};

for my $line ( sort { $a <=> $b } keys %{$notes} ) {

  print $notes->{$line}->{origin},";?t";

  print $doc->{body}->{$line}->{line};

}



まてよ、$notes って、もしかして、重複した行が入っているのか...

No comments: