=encoding euc-jp =head1 名前 VCS::Lite - 最低限のバージョンコントロールシステム =head1 概要 use VCS::Lite; # diff my $lit = VCS::Lite->new($fh1); my $lit2 = VCS::Lite->new($fh2); my $difftxt = $lit->diff($lit2); print OUTFILE $difftxt; # patch my $lit3 = $lit->patch($fh3); $lit3->save('~me/patched_file'); # merge my $lit4 = $lit->merge($lit2,$lit3); $lit4->save('~me/merged_file'); =head1 説明 このモジュールは、バージョンコントロールシステムと、一般に関連のある機能を提供します。 ですが、バージョンコントロールシステムを必要も、実装もしません。 用途は、wiki や、ドキュメントマネージメントシステムや設定マネージメントを含みます。 VCS::Lite は、Algorithm::Diffモジュールを使います。 Algorithm::Diffは、基本的な、diffing、pathing、merging の機能を提供します。 =head2 new The underlying object of VCS::Lite is an array. The members of the array can be anything that a scalar can represent (including references to structures and objects). The default is for the object to hold an array of scalars as strings corresponding to lines of text. If you want other underlying types, it is normal to subclass VCS::Lite for reasons which will become apparent, VCS::Lite の基礎をなすオブジェクトは配列です。 配列のメンバはスカラーが表現できるものなら何でもあり得ます(構造やオブジェクトへのリファレンスを含みます)。 デフォルトでは、オブジェクトは、テキストの行に一致する文字列としてのスカラーの配列です。 もし、他の基礎をなす型がいいなら、VCS::Lite のサブクラスにするのが普通です。 そうすれば、一目瞭然になるからです。 B が取り得るパラメタの形式のリストです。 my $lite = VCS::Lite->new( \@foo); #Array ref my $lite = VCS::Lite->new( '/users/me/prog.pl',$sep); #File name my $lite = VCS::Lite->new( $fh1,$sep); #File handle my $lite = VCS::Lite->new( \&next, $p1, $p2...); #Callback DWIM の Perl魂では、new は配列リファレンスを想定します。 あなたが、何でもリストを作る仕事を終えているなら(訳註:you have already done all the work of making your list of whatevers.)。 文字列(ファイル名)か、ファイルハンドルであれば、 ファイルは音を立てて食べられ、テキストの行ごとに読んで、配列のメンバに入ります。 コールバックであれば、ルーチンは、引き続いた、引数 $p1、 $p2 ...と一緒に、呼ばれます。 そして、ルーチンは配列に加えられた(push された)スカラーを返すことが期待されます。 $sep は、オプショナルな入力レコードセパレータ正規表現です。デフォルトでは、$/ を使います。 =head2 text my $foo = $lite->text; my $bar = $lit2->text('|'); my @baz = $lit3->text; スカラーコンテキストでは、食べられたファイル内容と等しいものを返します。 (オプショナルなセパレータパラメータは、文字列を一緒に繋げるのに使われます)。 リストコンテキストでは、行か、レコードのリストを返します。 =head2 save $lit3->save('~me/patched_file'); save は、new の逆戻し操作です。ファイルネームかファイルハンドルを与えます。 ファイルは、連続するメンバのために、オブジェクトのシリアライズメソッドの呼出を全部書き出します。 もし、サブクラスであれば、自分自身のシリアライザーを供給できます。 (訳註:未実装のようです)。 =head2 diff my $difftxt = $lit->diff($lit2); 2つの、VCS::Lite オブジェクトの間の違いを取ります。 出力されるのは、普通の diff の形式です。たとえば: 827c828 < my ($id, $name) = @_; --- > my ($id, $name, $prefix) = @_; =head2 patch my $lit3 = $lit->patch($fh3); VCS::Lite オブジェクトへパッチを適用します。 ファイルハンドルか、ファイル名の文字列を受け取ります。 diff フォーマットでファイルを読み、それを適用します。 パッチのあたったソースとして VCS::Lite オブジェクトを返します。 =head2 merge my $lit4 = $lit->merge($lit2,$lit3,\&confl); "平行四辺形のマージ"を行います。3つの VCS::Lite オブジェクト - 基礎のオブジェクトと2つの変更ストリーム - を取ります。 変更の組の両方でマージされた、VCS::Lite オブジェクトが返ります。 メソッドへ渡す3番目のパラメタは、マージのコンフリクトが起こったときに いつでも呼ばれるサブルーチンです。このサブルーチンは、コンフリクトを解決するか、 必要なテキストを挿入して、コンフリクトをハイライトする必要があります。 =head1 著者 (原文まま) I. P. Williams, EIvor dot williams (at) tiscali dot co dot United KingdomE =head1 SEE ALSO L.